根据您的评论,似乎您正在寻找关于使用Boolean包装类的“最佳实践”。但实际上并没有什么最佳实践,因为使用这个类本身就是一个坏主意。唯一需要使用对象包装器的情况是在绝对必须使用时(例如使用泛型
Generics,即在类似于
HashMap<String, Boolean>
中存储
boolean
等情况下)。使用对象包装器没有任何优势,但有很多缺点,尤其是会导致
NullPointerException
。
如果使用'!'代替.equals()来比较Boolean类型的值,是否有影响?
两种技术都容易受到“ NullPointerException”的影响, 因此在这方面没有区别。在第一种情况下,
Boolean
将会被
拆箱为其相应的
boolean
值并像正常比较一样进行比较。在第二种情况下,你正在调用
Boolean
类中的一个方法,它是
以下内容:
public boolean equals(Object obj) {
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
无论哪种方式,结果都是相同的。
如果使用.equals(false)来检查布尔值检查器的值,会有影响吗?
如上所述,不会有影响。
次要问题:Boolean应该与boolean有所不同处理吗?
如果您一定要使用Boolean类,则在执行任何比较之前始终检查null。例如:
Map<String, Boolean> map = new HashMap<String, Boolean>();
Boolean value = map.get("someKey");
if(value != null && value) {
}
这将有效,因为Java会
短路条件评估。您也可以使用三元运算符。
boolean easyToUseValue = value != null ? value : false
但是,说真的...除非你被迫不得不这样做,否则只需使用原始类型即可。
Boolean
而不是boolean
? - Jon Skeet这个问题适用于所有Java布尔比较,而不仅仅是链接中的内容
。我想知道所有Boolean
比较的最佳实践。 - ylun.caBoolean
而不是boolean
的最佳实践,因为比较对象包装器已经是一种糟糕的实践。哈哈。没有理由使用它,它只会让你面临不必要的错误,比如NullPointerException
。 - asteri