public class Test1 {
public static void main(String[] args) {
int j = 0;
for(int i = 0; i < 100; i++){
j = j++;
}
System.out.println(j);
}
}
程序的结果输出为0。这是为什么呢?
在这里JVM里面有两个存储区,一个是暂存区(以下称为堆栈),另一个是变量区。j=j++是先将j的值(0,原始值)存入堆栈中(对应图中分配一块新的内存空间),然后对变量区中j自加1,这时j的值确实是1,但随后将堆栈中的值赋给变量区的j,所以最后j=0;
而j=++j,是先对变量区中的j加1,再将变量区中的j值(1)存入堆栈,最后将堆栈中的值赋给自变量区的j,所以j=1;
总结: java使用了中间缓存变量的机制
对于j=j++可以换种写法:
temp=j;
j=j+1;
j=temp;
对于j=++j可以换种写法:
j=j+1;
temp=j;
j=temp;