1. 程式人生 > >java中i=i++的問題

java中i=i++的問題

  昨天看到下面這段程式碼,分享出來給大家看看,大家也可以討論討論。

  int i = 0;   i = i++;   System.out.println("i的值是 "+i);

   根據我們通常所知道的後自增先使用後增加的道理,i++在使用後i自身會增加一個數值,初始值為0時,自增後就是1,那麼輸出的結果應該是1.但實際上這題的結果卻是0。

  這是因為jvm在處理i = i++時, 會建立一個臨時變數來接收i++的的值,然後返回這個臨時變數的值,返回的值再被等號左邊的變數接收了,這樣就是說i雖然自增了但是又被賦值了0,這樣輸出的結果自然就是0了。

  不妨我們用temp臨時變數來接收i++的值,來看一下結果。

 

可以看到temp的結果就是0,也就是說賦值號右邊傳遞過來的是i未自增前的值,這符合後自增運算子先使用後增加的原則,這時候我們再輸出一下i的值。

i也的確自增了一個值,這樣就好理解為什麼i = i++中輸出第一個i為什麼是0了,因為i在自增後又被等式右邊的值覆蓋了。也就是說這裡的i的值發生了三次變化,第一次是我們定義i = 0;第二次就是i自增後變成了1;第三次就是i又被0值覆蓋了。