2015-03-31 121 views
-5

運行此程序後,我得到'a'的值爲5而不是6。爲什麼?什麼是後{a = 5; A = A ++; Syso(a);}

public class Test 
{ 
    public static void main(String args[]) 
    { 
     int a=5; 
     a=a++;      //post increment operator 
     System. out. println (a); //Output 
    } 
} 

爲什麼這是程序的輸出?

+3

您在第一句中回答您的標題問題。答案可以在這個網站上找到btw。這是因爲它正在保存舊值,遞增,然後返回您分配的舊值。 – keyser 2015-03-31 14:33:20

+0

你認爲答案應該是什麼? – 2015-03-31 14:37:34

+0

僅供參考如果你真的只需要谷歌Java後增加運算符來查找StackOverflow上的許多重複以及各種其他網站的詳細解釋後增量操作符如何工作。 – tnw 2015-03-31 14:41:15

回答

0

這是因爲後增量。在後增量中,返回增量前的值,然後執行增量。這條線將達到相同的結果System.out.println(a++);。應該打印增量前的值a

+0

但是這裏我的問題有點不同。後遞增後,值應增加,即a = 5;一個++;在打印a時,輸出將是6.但是,如果我們使用a = a ++;而不是一個++;然後打印然後增加的值,即6不會被打印,而是輸出將是5.爲什麼?請解釋。 – JavaSat 2015-03-31 15:26:16

+0

正如在重複和在這裏所說的那樣,值IS越來越多,但是您將其設置回到由表達式'a ++'返回的原始值。如果你希望它在* incrememting之後返回值*,你需要使用'++ a'來代替。閱讀[這個答案](http://stackoverflow.com/a/5413593/770270)*小心*。這是一個非常微妙的細節,但相當直接。 – tnw 2015-03-31 15:39:11

0

方案1(一個最後等於5)

a=5; 
a=a++; 

IS NOT同樣的事情

方案2(一個最終等於6)

a=5; 
int a 

要理解這一點,你必須打破down方案2中發生了什麼。

  1. 創建一個等於5的新基元int並將其引用到 a中。
  2. 創建一個新的原始INT等於值a指的是 加1
  3. 存儲參考到內部a新原始INT。

情況1完全不同。

  1. 創建一個等於5的新基元int並將其引用到a中。
  2. 創建新原語 int等於值a所指的值。
  3. 將1添加到可能已經傳遞到垃圾回收器的原始int中。

您感到困惑的原因是因爲您認爲a始終指的是內存中的相同位置。只要你說a=a你改變了內存中的位置。這現在是一個新的a,不是舊的a,所以基本上你的++在這種情況下什麼都不做。

a=a++;並不意味着讓a逗留a,然後這個語句後加1。這實際意味着是讓a等於一個新的int,只是恰巧具有相同的價值a,然後加1那個老詮釋我剛投入黑洞。

編輯:迴應評論

如果你不想失去你原來a變量,你必須以不同的方式編寫代碼。

int a = 5; 
int b = a; //stores the original value 
a++; //now a equals 6 
相關問題