陷阱 - 用于测试布尔值
有时新的 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
)更简洁,更自然。