废话不说,直接看例子
1 public class Test3 { 2 public static void main(String[] args) { 3 int j =0 ; 4 for(int i =0 ;i<100;i++){ 5 j=++j; 6 } 7 System.out.println(j); 8 } 9 }
输出结果是 100
j = ++j;
即为:
j = j + 1;
temp = j;
j = temp
public class Test3 { public static void main(String[] args) { int j =0 ; for(int i =0 ;i<100;i++){ j=j++; } System.out.println(j); } }
//输出结果为0
过程为:
temp = j;
j= j+1;
j= temp;
为什么会出现这两种不同的情况呢?
(1)是因为java使用了中间变量缓存机制,在执行自增运算的时候,会为每个自增操作分配一个临时变量。如果是前缀加(++i)会先自加1后赋值(给临时变量),如果是后缀加(i++),就会先赋值后加1,运算最终使用的并不是变量本身,而是被赋了值的临时变量。
(2)j=j++可以分解为赋值和自增两个操作:读出一个值到缓存,将值赋给变量,所以我们要完成三次操作:
temp = j;(读取变量j到缓存)
j = j + 1;(改变变量j的值为缓存值,改变变量j的值为1)
j = temp;(直接读取的值为缓存之0),所以本题读取的值最终是0.