簡體   English   中英

不確定for循環迭代嗎?

[英]Unsure about for-loop iteration?

所以我是Java編程的新手,我很難理解為什么

for (int i = 0, j=0; i <10; i++) {
    System.out.println(j += j++);
}

打印0十次?

j += j++

可以認為是

j = j + j++

現在,我們開始與j = 0 ,那么j++遞增j返回的舊值0 ,因此我們基本上只剩下(!),

   j = 0 + 0
//     ^   ^
//     j   j++

十次。 j的增加被以下事實覆蓋:我們在緊隨其后將j重新分配給右側( 0 )的結果。


有時,我發現查看字節碼會有所幫助。 j += j++實際上是:

ILOAD 1    // load j, which is 0
ILOAD 1    // load j, which is 0
IINC 1 1   // j++ 
IADD       // add top two stack elements
ISTORE 1   // store result back in j

由於IINC不以任何方式改變堆棧, IADD增加值j本身: 0 + 0 這一結果被存儲回j通過ISTORE j已經遞增IINC

j += j++您實際上正在做

j = j + j++;

所以對於j=0你會得到

j = 0 + j++

並且由於j++將在返回j的值后遞增j ,因此您將獲得

j = 0 + 0;

現在,在j++ j將等於1,但是在計算0+0 ,它將返回0 ,並且將打印該值。

您不確定for循環嗎? int i = 0聲明一個int i並將其設置為0。j = 0還聲明另一個int j並將其設置為0。i <10表示盡管i小於10,循環仍將繼續。 最后,i ++聲明每次循環完成時,i = i + 1,因此本質上將一個加到i上。

System.out.println(++j);

代替

System.out.println(j += j++); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM