++i): 先將變數值加 1,運算式值為遞增後的新值。i++): 先取得變數當前值作為運算式值,然後才將變數加 1。// 寫法 A:後綴
for (int i = 0; i < 5; i++) { ... }
// 寫法 B:前綴
for (int i = 0; i < 5; ++i) { ... }
結論:在獨立陳述式 i++; 或 ++i; 以及 for 迴圈的迭代表達式中,兩者最終效果完全相同,i 都會遞增 1,迴圈執行次數無差異。 編譯器會生成相同的位元碼。
int i = 0;
int a = i++; // a=0, i=1
int b = ++i; // i=2, b=2
// 陣列索引經典錯誤
int[] arr = {10, 20, 30};
int idx = 0;
System.out.println(arr[idx++]); // 輸出 arr[0] = 10
System.out.println(arr[++idx]); // 輸出 arr[2] = 30 (idx 先變 2)
早期 C/C++ 編譯器未優化時,++i 避免建立暫存副本,效能略優。現代 Java JIT 編譯器對兩者生成相同機器碼,無效能差異。
++i (語意更清晰:遞增動作本身),但 i++ 完全可接受。圖解重點:for 迴圈迭代表達式中,i++ 與 ++i 無任何行為差異。