x == (x = y) 不等於 (x = y) == x ?

極光推送發表於2019-01-19

簡評:不瞞你說,我現在數數都是從 0 開始數的,整數是 1024。

有這麼一個 Java 程式:

class Quirky {
    public static void main(String[] args) {
        int x = 1;
        int y = 3;

        System.out.println(x == (x = y)); // false
        x = 1; // reset
        System.out.println((x = y) == x); // true
     }
}

學習數學時我們學會了操作符優先原則,按照這個原則,這裡的兩次輸出應該都是 true 才對,可為什麼兩次的輸出結果不同呢?

其實 Java 中 == 是一個二進位制相等運算子,簡單而言就是在評估 == 右邊運算元的任何部分之前,二進位制運算子 == 的左邊的運算元已經被完全評估過了。

//the example values
x = 1;
y = 3;

所以第一個運算式的步驟是:

x == (x = y)
1 == (x = y)
1 == (x = 3) //assign 3 to x, returns 3
1 == 3
false

第二個運算式是:

(x = y) == x
(x = 3) == x //assign 3 to x, returns 3
3 == x
3 == 3
true

原文連結:x == (x = y) 不等於 (x = y) == x ?

相關文章