陷阱 - 用於測試布林值
有時新的 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
)更簡潔,更自然。