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值覆蓋了。

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