表達式 a += a -= a * a,初始 a=2。C 語言結果 -4,Java 結果 0。根因:Java 按左到右求值操作數,C 編譯器實現多為右到左或未定義行為。
a = 2
1. 計算左邊 a (值 2) → 臨時保存 left=2
2. 計算右邊 a -= a * a
2.1 計算右邊 a * a = 4
2.2 a = a - 4 = -2 → a 變為 -2,表達式值 -2
3. left += (-2) = 0 → a 最終為 0
1. 先算右邊 a -= a * a
a = 2 - 4 = -2
2. 左邊 a += (-2) 此時 a 已為 -2
-2 + (-2) = -4
// Java
int a = 2;
a += a -= a * a;
System.out.println(a); // 0
// 等價拆分
int a = 2;
int temp = a - a * a; // -2
a = temp; // -2
a = a + temp; // 0