[英]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.