如何比较布尔?

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

while(!checker) {
    matcher = pattern.matcher(number);
    if(matcher.find())
        checker = true;
    else
        year++;
}

如果使用.equals(false)来检查Boolean checker的值,它会影响吗?

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

另外, Boolean应该处理不同于boolean


从您的评论中,您似乎在寻找使用Boolean包装类的“最佳实践”。 但是,实际上没有任何最佳实践,因为使用这个类开始是一个坏主意。 使用对象包装器的唯一原因是在绝对必须的情况下(例如使用泛型时,即在HashMap<String, Boolean>等中存储boolean )。 使用对象包装没有好处,并且有很多缺点,最值得注意的是它会让你打开NullPointerException

如果'!'有关系吗? 用于布尔值而不是.equals()?

这两种技术都容易受到NullPointerException ,所以在这方面并不重要。 在第一种情况下, Boolean将被取消装箱到相应的boolean值中,并与正常情况进行比较。 在第二种情况下,您从Boolean类调用一个方法,如下所示:

public boolean equals(Object obj) {
    if (obj instanceof Boolean) {
        return value == ((Boolean)obj).booleanValue();
    }
    return false;
}

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

如果使用.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
}

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

boolean easyToUseValue = value != null ? value : false;

但认真......只是使用原始类型,除非你被迫不去。


尝试这个:

if (Boolean.TRUE.equals(yourValue)) { ... }

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


只要checker不为null ,您可以使用!checker发布。 从Java 5开始,这是可能的,因为这个Boolean变量将被自动装箱到primivite boolean值。

链接地址: http://www.djcxy.com/p/91835.html

上一篇: How to compare Boolean?

下一篇: Javafx 2 click and double click