2012-08-27 100 views
3

我有一個小懷疑。爲什麼下面的代碼是打印值i = 2。後增加行爲

int i=2; 
i=i++; 
System.out.println(i); 

可有人請解釋我什麼是行沒有發生2

所以在這裏做++在這裏沒有意義?

感謝

+0

無需將'i ++'值重新分配給'i'。 'int i = 2;我++; System.out.println(i);' –

+0

...或者'int i = 2; System.out.println(++ i);' –

+0

最近發佈了同樣的問題.. http://stackoverflow.com/questions/12033676/if-y-1-and-yy-why-when-i-print-y這是價值1 –

回答

5
i=i++; 

因爲首先分配情況,那麼增量適用。

喜歡的東西:

首先我得2,然後++操作發生,但結果不會被重新分配給我,所以我值會保持爲2

+0

增量是存儲在堆或棧上的值之後嗎?增加的值是否丟失,除非再次存儲在某個變量中? – Raghunandan

+0

@Raghunandan:假設它是局部變量,它將被存儲在堆棧中。它會留在記憶中,但沒有辦法參考/訪問它。 – kosa

+0

謝謝,這清除了我的懷疑。 +1的解釋。 – Raghunandan

0

當你告訴i=i++;您正在告訴計算機將i分配給i,之後增加i的值,但不會影響i,因爲我的值爲2.

正確的方法是:i=++i;含義,加1我之前分配給我,或者你可以簡單地使用i++;

1

i = i++;第一評估i++表達,從而增加i和計算結果爲i之前到增量的值。由於您立即將此值指定爲i,因此它將重置值i,因此增量似乎從未發生過。 i = ++i;會導致其他行爲。

0

感謝大家幫助我理解那些很有價值的東西。

我在這發現了一個不錯的帖子。

我從stackoverflow論壇給出的建議中得到了答案,但有一些明確的解釋,失去了我的感覺。

Miljen Mikic建議鏈接不起作用,並說沒有找到頁面。

下面的問題給出一些明確的解釋是

int a=2, b=2; 
int c = a++/b++; 
System.out.println(c); 

拆卸以下內容。

0:iconst_2  ; [I]Push the constant 2 on the stack[/I] 
    1:istore_1  ; [I]Pop the stack into local variable 1 (a)[/I] 
    2:iconst_2  ; [I]Push the constant 2 on the stack, again[/I] 
    3:istore_2  ; [I]Pop the stack into local variable 2 (b)[/I] 
    4:iload_1  ; [I]Push the value of a on the stack[/I] 
    5:iinc1, 1 ; [I]Add 1 to local variable 1 (a)[/I] 
    8:iload_2  ; [I]Push the value of b on the stack[/I] 
    9:iinc2, 1 ; [I]Add 1 to local variable 2 (b)[/I] 
    12:idiv   ; [I]Pop two ints off the stack, divide, push result[/I] 
    13:istore_3  ; [I]Pop the stack into local variable 3 (c)[/I] 
    14:return 

這幫助我理解得更好。

請補充說明如果我錯了我的觀點。

感謝您的答案。