我只是想創建一個小小的Java-Puzzle,但我迷惑了自己。拼圖的一部分是:Java中的前後增量
什麼下面的代碼做:
public class test {
public static void main(String[] args) {
int i = 1;
i += ++i + i++ + ++i;
System.out.println("i = " + i);
}
}
它輸出9
。
我的(至少部分)錯誤解釋:
我不太清楚,但我想i +=
後長期被評價是這樣的:
所以
int i = 1;
i += ++i + i++ + ++i;
與
相同int i = 1;
i += ((++i) + (i++)) + (++i);
這從左到右進行評估(請參閱Pre and postincrement java evaluation)。
第一個++i
增量爲i
至2
並且返回2
。所以,你必須:
i = 2;
i += (2 + (i++)) + (++i);
的i++
返回2
,因爲它是i
新值,和增量i
到3
:
i = 3;
i += (2 + 2) + ++i;
第二++i
增量i
到4
並返回4
:
i = 4;
i += (2 + 2) + 4;
所以你最終得到12
,而不是9
。
我的解釋中的錯誤在哪裏?什麼是正確的解釋?
你確定它輸出8嗎?因爲我輸出9. – 2012-07-11 11:48:05
感謝您的提示。它輸出9(8是其他難題之一)。然而,9不是12. – 2012-07-11 11:49:15
我得到的輸出爲9! – Patton 2012-07-11 11:49:39