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

來源:互聯網
上載者:User
作者: yjwgeg
Thursday, March 4 2004 2:25 PM

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

 

JAVA:

public class test

{

public static void main(String args[])

{

inti,j;

i=0;

for(j=0;j<5;j++)

{

  i=i++;

System.out.println("i="+i);

}

}

}

 

C:

#include

main()

{

  inti,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++就不會有問題了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.