从您的意见中,您似乎正在寻找使用布尔包装器类的“最佳做法”.但是真的没有任何最佳做法,因为使用这个类开始是一个坏主意.使用对象包装器的唯一原因是在绝对必须的情况下(例如当使用
Generics时,即在HashMap< String,Boolean>等中存储布尔值).使用对象包装器没有什么大不了的缺点,最引人注目的是它可以打开NullPointerExceptions.
Does it matter if ‘!’ is used instead of .equals() for Boolean?
这两种技术都将受到NullPointerException的影响,所以在这方面并不重要.在第一种情况下,布尔值将为unboxed,成为其各自的布尔值,并与之正常比较.在第二种情况下,您正在从Boolean类调用一个方法,即the following:
public boolean equals(Object obj) {
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
无论哪种方式,结果是一样的.
Would it matter if .equals(false) was used to check for the value of the Boolean checker?
以上,不.
Secondary question: Should Boolean be dealt differently than boolean?
如果绝对必须使用布尔类,则在执行任何比较之前始终检查null.例如.,
Map map = new HashMap();
//...stuff to populate the Map
Boolean value = map.get("someKey");
if(value != null && value) {
//do stuff
}
这将工作,因为Java short-circuits有条件的评估.您也可以使用三元运算符.
boolean easyToUseValue = value != null ? value : false;
但严重的是,只是使用原始类型,除非你被迫不要.