Java學習之神奇的i=i++

學習過一門計算機語言的人一定知道j=i++的運算結果,整個表達式的值爲i,而i的值變爲i+1;那麼i=i++又是一個什麼情況呢?下面分別用java 和 c 兩種語言來做個測試:

Java:

public class test
{
     public static void main(String[] args)
     {
          int i = 0;

          for(int j = 0;j < 5;j++)
          {
               i = i++;
               System.out.println("i = " + i);
          }
     }
}

C:

#include<stdio.h>

main()
{
    int i,j;
    i=0;
    for(j=0;j<5;j++)
    {
          i=i++;
          printf("i=%d/n",i);
    }
}

你也許會問,這麼簡單的程序會有什麼問題呢?是的,如果不相信的話,你可以運行一下這兩個程序,得到的結果非常讓人震驚。

第一個JAVA程序得出的結果如下:

i=0

i=0

i=0

i=0

i=0

而第二個C程序得出的結果如下:

i=1

i=2

i=3

i=4

i=5

同樣都是i=i++,爲什麼這麼大的差異呢?原來是在編譯器上出了問題,java的編譯器在遇到i++和i- -的時候會重新爲變量運算分配一塊內存空間,以存放原始的值,而在完成了賦值運算之後,將這塊內存釋放掉,下面首先看一下如果是j=i++的情況:

i的原始值存放在後開闢的內存中,最後這個值將賦值給j,這樣j=i++後,j就會得到i的值,而i又將自加,所以,在釋放內存之後,原來存放j和i的地方將得到值將是:j(此時的值等於初始i值)和i(i自加後的值)。

明白了上面的問題,讓我們接下來看看i=i++的情況:

所以這樣最後一次循環內的結果仍舊是i(即0)。

而C語言中的i=i++就只是完成i++的內容,所以結論會不同。這種情況說明java和c的處理語法的機制不同,如果在程序中只輸入i++就不會出現這個方面的問題,所以大家在以後的程序中如果使用到i=i++的時候要格外小心,一般只需要用i++就不會有問題了。

發佈了33 篇原創文章 · 獲贊 0 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章