Java 自增原理
很多人都知道 i++ 和 ++i 的区别
- a = i++;
- a = i;
- i = i+1;
- a = ++ i;
- i = i + 1;
- a = i;
但碰到 i = i ++;的时候很多人就懵了? i是原来的值,还是 i+1 ?
答案是 原来的值。
其中的原理其实很简单,Java在执行自增一类的操作的时候是会产生一个中间缓存变量
原理解释 :
i++ 代码:
int i = 0;
int a = i ++ ;
结果:i = 0 ; a = 0;
结果解释:
a = i ++; 其实是拆分成3条语句,而不是两条
1. int temp = i;
2. i = i + 1;
3. a = temp;
++i 代码:
int i = 0;
int a = ++i ;
结果:i = 1 ; a = 1;
结果解释:
a = ++ i ; 其实是拆分成3条语句,而不是两条
1. i = i+1;
2. int temp = i;
3. a = temp;
i = i++ 代码:
int i = 0;
int i = i ++ ;
结果:i = 0 ;
结果解释:
a = i ++ ; 其实是拆分成3条语句,而不是两条
1. int temp = i;
2. i = i + 1;
3. i = temp;
i = ++i 代码:
int i = 0;
int i = ++ i ;
结果:i = 1 ;
结果解释:
i = ++ i ; 其实是拆分成3条语句,而不是两条
1. i = i + 1;
2. int temp = i;
3. i = temp;
Java 自增原理的更多相关文章
- Java自增原子性问题(测试Volatile、AtomicInteger)
这是美团一面面试官的一个问题,后来发现这是一道面试常见题,怪自己没有准备充分:i++;在多线程环境下是否存在问题?当时回答存在,接着问,那怎么解决?...好吧,我说加锁或者synchronized同步 ...
- Java事务的原理与应用
Java事务的原理与应用 一.什么是Java事务 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (isolation ...
- 深入Java核心 Java内存分配原理精讲
深入Java核心 Java内存分配原理精讲 栈.堆.常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同.本文将深入Java核心,详细讲解Java内存分配方面的知识. Java内存分 ...
- paip.java UrlRewrite 的原理and实现 htaccess正则表达式转换
paip.java UrlRewrite 的原理and实现 htaccess正则表达式转换 #---KEYWORD #-正则表达式 正则表达式 表示 非指定字符串开头的正则 排除指定目录.. 作者 老 ...
- Java虚拟机工作原理详解 (一)
一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入 javac YourClassNam ...
- Java虚拟机工作原理详解
原文地址:http://blog.csdn.net/bingduanlbd/article/details/8363734 一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了 ...
- Java爬虫搜索原理实现
permike 原文 Java爬虫搜索原理实现 没事做,又研究了一下爬虫搜索,两三天时间总算是把原理闹的差不多了,基本实现了爬虫搜索的原理,本次实现还是俩程序,分别是按广度优先和深度优先完成的,广度优 ...
- Java虚拟机工作原理具体解释
一.类载入器 首先来看一下java程序的运行过程. 从这个框图非常easy大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘其中.然后你在命令行中输入 javac YourClass ...
- Java基础知识强化之多线程笔记05:Java程序运行原理 和 JVM的启动是多线程的吗
1. Java程序运行原理: Java 命令会启动Java 虚拟机,启动 JVM,等于启动了一个应用程序,也就是启动了一个进程.该进程会自动启动一个 “主线程” ,然后主线程去调用某个类的 m ...
随机推荐
- 通过本质看现象:关于Integer受内部初始化赋值范围限制而出现的有趣现象
左手代码,右手文章.——朱季谦 这是我的第一篇技术博客,作为一名技术小菜鸟,总体而言显得很拙见,但也算是成长路上的一个小脚印,希望能在以后的日子里,可以对JAVA技术有一个更加深入的思考与认识. 前几 ...
- SQL*Plus命令
简介set命令 一般使用SQL PLUS导出数据时一般使用以下参数就可以了. set echo off; -- 不显示脚本中的每个sql命令(缺省为on)set feedback off; -- 禁止 ...
- 原创《如何用vue来轻松的驾驭 html5 webapp的页面体验》
由于最近开始要做mobile的webapp 项目,所以利用周末的时间思考了下页面的体验问题,我主要参考了"微信"的页面体验,总结主要有2个页面切换效果(点击进入页面效果 和 返回上 ...
- Bootstrap3基础 栅格系统 col-md-offset 向右偏移
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- python 之生成器的介绍
# 用生成器(generators)方便地写惰性运算 def double_numbers(iterable): for i in iterable: yield i + i # 生成器只有在需要时才 ...
- Typora 和 markdown
目录 Typora 和 markdown Typora 简单介绍 markdown语法 导出 Typora 和 markdown Typora 简单介绍 支持markdown的一款优雅的编辑器. 绿色 ...
- visual编译通过后,debug报错找不到*.dll
解决: 在debug目录下放入*.dll
- 數據監控与診斷--環形緩沖區(RING BUFFER)
1. 環形緩沖區 動態管理視圖: sys.dm_os_ring_buffers 查看ring_buffers: Select distinct ring_buffer_type from sys.d ...
- 查看 linux 目录大小
查看 linux 目录大小 du -sm * | sort -n # 以m显示并按小到大排序
- myeclipse中tomcat配置虚拟路径,用于存储及上传图片
由于双击tomcat后只出现了overview窗口,没有出现Models窗口,如下图所示,故eclipse中的方法不能用. 采用另一种方法 在自己的tomcat的安装目录下 ( 我安装目录的是 D:\ ...