2017-04-05 71 views
0

我正在面對以下代碼的問題。以下代碼顯示意外的答案。Java-爲什麼Post Increment不改變值?

class Testing { 
    public static void main(String args[]) {  
    int y = 2; 
    y = y++; 
    System.out.println(y); //output is 2. It should be 3 right ? 
} 
} 

預期值y爲3,因爲它必須將值分配給ÿ第一和然後遞增ý值。

但是y的值是2.是什麼原因?有人可以給我詳細的解釋嗎?

+0

後增量只是'y ++;'不是'y = y ++;'。 – Kayaman

+0

另請閱讀以下更一般的觀點:http://stackoverflow.com/documentation/java/4388/java-pitfalls/27279/pitfall-combining-assignment-and-side-effects#t=201704051342252965033 –

+0

出於好奇,你從哪裏得出假設,增量應該在作業之後發生? – Holger

回答

0

這是因爲y = y++正在給y賦值2,只是之前增加了。

+0

但是在執行println時已經增加了'y'() –

+0

由於「新」y被設置爲2,所以已經在內存中替換了「遞增」y。 –

+0

Do你的意思是「將2的值賦值給y,*賦值後的權利*」,因爲重要的是增加的值將被覆蓋? – Holger

0

這裏y的值是變化的,但是它在自己改變爲y之前再次被賦值。 所以不要使用

y = y++

只使用

y++

它的工作原理。

-2

有一件事我可以說的是,算後增量

y = y++; 

被分配後進行。如果你想這樣做,你可以使用

y = ++y; 

但我想這不是你想知道的。

+3

「後增量y = y ++;在賦值後完成」不是很清楚,或者完全錯誤。問題在於'y ++'首先緩存y的當前值,然後遞增並保存在'y'中,然後緩存值從表達式返回並且可以由'y = ...'使用,這會否定以前的增量,因爲我們正在存儲原始價值。 – Pshemo

+0

@Pshemo:在這個答案中沒有任何不清楚的地方,它只是錯誤的,甚至與它試圖回答的問題相矛盾。 – Holger