今天碰到一个有趣的代码,原以为so easy,结果却狠狠打脸。。。
Guess the result of the following two code snippets
- Java
int num = 0; for (int i = 0; i < 100; i++) { num = num++; } System.out.println(num);
- C++
int num = 0; for (int i = 0; i < 100; i++) { num = num++; } cout<<num<<endl;
Result(可自行尝试)
- java(0)
- C++(100)
Analyze
- java
i = i++;//可分解为下面3步 //1.先将i的值存入临时变量 int temp = i;//temp此时为0 //2.i进行自加 i = i + 1; //i此时为1 //3.执行赋值语句将临时变量 i = temp;//i此时又变回0
来自于网友的分析:
jvm中有两个存储区,一个是暂存区(一个堆栈),另一个是变量区。当执行i=i++时,jvm先将i=0压入堆栈,再执行i+1,然后再将堆栈中的i=0取出赋值给左边的i,从而使输出结果为0; - C++
C++中所有操作都是在内存中进行的,所以结果为100。