#include <stdio.h>
int main() {
int x = 5;
x = x++;
printf("x=%d\n", x); // 輸出:6
return 0;
}

public class Calc {
public static void main(String[] args) {
int x = 5;
x = x++;
System.out.println(x); // 輸出:5
}
}

| 語言 | 表達式值 | 副作用 (遞增) 生效時機 | 結果 |
|---|---|---|---|
| C/C++ | 舊值 (5) | 不確定 (sequence point 前),編譯器可選擇在賦值前/後完成遞增 | GCC 選擇先賦值後遞增 → 6 |
| Java | 舊值 (5) | 確定:表達式求值完成、賦值前完成 | 遞增被後續賦值覆蓋 → 5 |
x = x++ 等價於 x = 5; x = 6; (結果 6) 或 tmp=5; x=6; x=tmp; (結果 5)// Java / C 通用安全寫法
x = x + 1; // 或 x++;
// 若需用舊值
int old = x;
x = x + 1;
-Wsequence-point`、Java 編譯器無警告但可用靜態分析工具 (SpotBugs, SonarQube) 檢測// Java & C 行為一致
int x = 5;
x = ++x; // 表達式值為新值 6,賦值後 x = 6
但同樣不建議寫成 `x = ++x`,直接 `++x;` 或 `x++;` 即可。