1 public class Main { 2 public static void main(String[] args) { 3 int i = 0; 4 i = i++; 5 System.out.println(i); 6 7 i = ++i; 8 System.out.println(i); 9 10 } 11 }
运行结果:
0 1
同样的逻辑代码在C++中的运行结果是不一样!
这和jvm中的缓存机制有关,jvm有两个存储区,一个是暂存区(堆栈),另一个是变量区。
在执行 i = i++;这条语句的时候,jvm使用了中间变量缓存机制,其真是逻辑如下:
temp = i; i = i + 1; i = temp;
在执行 i = ++i;这条语句的时候,逻辑如下:
i = i + 1; temp = i; i = temp;
若是有兴趣可以查看一下字节码,可以更清晰的看到这个过程中堆栈中的变化。