Java中i = i++;與C++中i = i++;結果比較

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

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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章