我有一個小懷疑。爲什麼下面的代碼是打印值i = 2。後增加行爲
int i=2;
i=i++;
System.out.println(i);
可有人請解釋我什麼是行沒有發生2
所以在這裏做++在這裏沒有意義?
感謝
我有一個小懷疑。爲什麼下面的代碼是打印值i = 2。後增加行爲
int i=2;
i=i++;
System.out.println(i);
可有人請解釋我什麼是行沒有發生2
所以在這裏做++在這裏沒有意義?
感謝
i=i++;
因爲首先分配情況,那麼增量適用。
喜歡的東西:
首先我得2,然後++操作發生,但結果不會被重新分配給我,所以我值會保持爲2
增量是存儲在堆或棧上的值之後嗎?增加的值是否丟失,除非再次存儲在某個變量中? – Raghunandan
@Raghunandan:假設它是局部變量,它將被存儲在堆棧中。它會留在記憶中,但沒有辦法參考/訪問它。 – kosa
謝謝,這清除了我的懷疑。 +1的解釋。 – Raghunandan
當你告訴i=i++;
您正在告訴計算機將i分配給i,之後增加i的值,但不會影響i,因爲我的值爲2.
正確的方法是:i=++i;
含義,加1我之前分配給我,或者你可以簡單地使用i++;
i = i++;
第一評估i++
表達,從而增加i
和計算結果爲i
之前到增量的值。由於您立即將此值指定爲i
,因此它將重置值i
,因此增量似乎從未發生過。 i = ++i;
會導致其他行爲。
感謝大家幫助我理解那些很有價值的東西。
我在這發現了一個不錯的帖子。
我從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
這幫助我理解得更好。
請補充說明如果我錯了我的觀點。
感謝您的答案。
無需將'i ++'值重新分配給'i'。 'int i = 2;我++; System.out.println(i);' –
...或者'int i = 2; System.out.println(++ i);' –
最近發佈了同樣的問題.. http://stackoverflow.com/questions/12033676/if-y-1-and-yy-why-when-i-print-y這是價值1 –