今天碰到一個有趣的代碼,原以爲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。