代码一:
public class test {
public static void main(String[] args) {
int i = 0;
int k = 0;
for(;k<10;k++) {
i = i++;
System.out.println(i);
}
}
}
如上述代码,运行结果为10个0,而不是1-10。这里就存在理解上的一个误区:先进行i++运算后,再把结果赋值给i。其实不然,解释如下:
对于i = i ++ 其实是存在一个中间变量比如 _x ,然后在将 _x 的值赋值给 i ,得到最后的结果:
_x = i ++ ; i 的值赋值给 _x ,然后 i 自增为 1 ,_x 为 0
i = _x ; i 的值被覆盖为 0,自增的i = 1被舍弃
所以最终的结果是 0
= 的作用是将 = 右边的计算结果赋值给左边
总结如下:
_x 负责中间变量保存i的值,最后一步都是_x赋值给等号左边的变量
++在前的时候,先自增,在保存值到_x,最后_x 的值赋值给等号右边的变量
++在后的时候,_x先保存值,在自增,然后把_x的值赋值给等号右边的变量
所以代码一输出i的结果为10个0,若把i=i++改成i=++i,其输出结果就变成了1-10。
现在你明白了么?