陷阱 - 用於測試布林值

有時新的 Java 程式設計師會編寫如下程式碼:

public void check(boolean ok) {
    if (ok == true) {           // Note 'ok == true'
        System.out.println("It is OK");
    }
}

一位經驗豐富的程式設計師會發現它很笨拙,並希望將其重寫為:

public void check(boolean ok) {
    if (ok) {
       System.out.println("It is OK");
    }
}

然而,ok == true 比簡單的笨拙更加錯誤。考慮這種變化:

public void check(boolean ok) {
    if (ok = true) {           // Oooops!
        System.out.println("It is OK");
    }
}

這裡的程式設計師錯誤輸入了 == 作為 = …現在程式碼有一個微妙的 bug。表達 x = true 無條件地將 true 分配給 x 然後評估為 true。換句話說,無論引數是什麼,check 方法現在都會列印沒關係

這裡的教訓是擺脫使用 == false== true 的習慣。除了冗長之外,它們還使你的編碼更容易出錯。

注意:避免陷阱的 ok == true 的可能替代方案是使用 Yoda 條件 ; 即將文字放在關係運算子的左側,如 true == ok。這有效,但大多數程式設計師可能會同意 Yoda 條件看起來很奇怪。當然,ok(或 !ok)更簡潔,更自然。