转自:https://blog.csdn.net/MaoTongBin/article/details/72852954
有一道经典的i++例题,内容如下:
这里使用的中间缓存机制虽然给出了解释,但还是不容易理解。在网上找了一些其他人的解释:
因为在计算过程中,使用了Java中间变量缓存机制。在java中,执行自增运算时,会为每一个自增操作分配一个临时变量,如果是前缀加(++i),就会“先自加
1
后赋值(给临时变量)”;如果是后缀加(i++),就会“先赋值(给临时变量)后自加
1
”。运算最终使用的,并不是变量本身,而是被赋了值的临时变量。
即 method_1方法中的
[java] view plaincopyprint?
j = j++;
等同于:
[java] view plaincopyprint?
int
temp = j;
j = j +
1
;
j = temp;
method_2方法中的
[java] view plaincopyprint?
j = ++j;
等同于:
[java] view plaincopyprint?
j = j +
1
;
int
temp = j;
j = temp;
看了这个解释算是比较清晰,但是觉得其中 运算两边都是用了j,容易让人迷惑。所以我换了一种方式来描述这个问题:
这里把左边的j换成变量a
a = j++; //
大家都知道j++ 是先使用,后自加。那究竟如何理解呢?
上面的语句等同于:
int
temp = j; //这里就是所谓的先使用,既先把j赋值给临时变量temp
j = j +
1
; //在自加, j 本身自增了1
a = temp; //将temp赋值a
通过以上过程既实现了先使用后自加
method_2方法中的
a = ++j; //先自加再使用
等同于:
j = j +
1
; //先自加
int
temp = j; //在使用
a = temp;
到这里我想你应该明白了两个问题:1.什么是中间缓存变量机制 2.为什么java要使用中间缓存变量机制
最后留一个简单的问题,请大家思考,帮助大家深入理解。请问下面四段代码的执行结果:
- for (int i = 0; i < 2; ) {
- System.out.println(i++);
- }
- for (int i = 0; i < 2; ) {
- System.out.println(++i);
- }
- for (int i = 0; i < 2; ) {
- System.out.println(i=++i);
- }
- for (int i = 0; i < 2; ) {
- System.out.println(i=i++);
- }
当心内存溢出!