for (int i = 0, j = 0; i < 10; i++) j += j++;
// 輸出:j 始終為 0
// Java 語言規範 §15.26.2
E1 op= E2 等價於 E1 = (T) ((E1) op (E2))
// 關鍵點:E1 只求值一次,且在 E2 之前求值
因此 `j += j++` 步驟為:
for (int i = 0, j = 0; i < 10; i++) j += ++j;
// i=0: j=0 → ++j=1 → 0+1=1 → j=1
// i=1: j=1 → ++j=2 → 1+2=3 → j=3
// i=2: j=3 → ++j=4 → 3+4=7 → j=7
// ... 指數級增長
j = j + j; // 或 j *= 2;
j++;
理解求值順序與副作用,才能寫出可預測、可維護的代碼。