如何比较布尔值?

ylu*_*.ca 29 java boolean

以此为例(摘自Java正则表达式检查程序不起作用):

while(!checker) {
    matcher = pattern.matcher(number);
    if(matcher.find())
        checker = true;
    else
        year++;
}
Run Code Online (Sandbox Code Playgroud)

如果.equals(false)用来检查价值是否重要Boolean checker

我知道有是颇为相似.但是,显然这个问题涉及原始boolean而不是对象包装器Boolean; 因此,.equals()不适用.

还应该Boolean以不同的方式处理boolean

ygl*_*odt 53

试试这个:

if (Boolean.TRUE.equals(yourValue)) { ... }
Run Code Online (Sandbox Code Playgroud)

作为额外的好处,这是无效的.


ast*_*eri 18

从您的评论中,您似乎正在寻找使用Boolean包装类的"最佳实践" .但实际上没有任何最佳实践,因为开始使用这个类是个坏主意.使用对象包装器的唯一原因是在绝对必须的情况下(例如使用泛型时,即存储booleanHashMap<String, Boolean>等等中).使用对象包装器没有上升空间和许多缺点,最值得注意的是它打开了你NullPointerException.

如果'!'有关系吗?是否使用.equals()代替布尔值?

这两种技术都容易受到a的影响NullPointerException,所以在这方面并不重要.在第一种情况下,Boolean将被拆箱到其相应的boolean值,并作为正常的比较.在第二个场景中,您正在调用Boolean类中的方法,如下所示:

public boolean equals(Object obj) {
    if (obj instanceof Boolean) {
        return value == ((Boolean)obj).booleanValue();
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,结果都是一样的.

是否使用.equals(false)来检查布尔检查器的值是否重要?

按上述,不.

次要问题:布尔值应该与布尔值不同吗?

如果您绝对必须使用该Boolean课程,请null在执行任何比较之前检查.例如,

Map<String, Boolean> map = new HashMap<String, Boolean>();
//...stuff to populate the Map
Boolean value = map.get("someKey");
if(value != null && value) {
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

这将起作用,因为Java 短路条件评估.您也可以使用三元运算符.

boolean easyToUseValue = value != null ? value : false;
Run Code Online (Sandbox Code Playgroud)

但严重的是......只要使用原始类型,除非你被迫不这样做.