布尔值!= false

时间:2010-11-30 12:04:35

标签: java boolean autoboxing

在Java中,你通常会说

if(someBool != false)

相同

if(someBool)

但是,如果someBool不是boolean类型而是Boolean,并且其值为null,该怎么办?

12 个答案:

答案 0 :(得分:112)

如果你想处理Boolean个实例以及基元并且是空的,那么你可以使用它:

if(Boolean.TRUE.equals(someBool))

答案 1 :(得分:48)

它将抛出NullPointerExceptionnull null投掷NPE。

但这仅表示您不得允许null值。使用默认值,或者不使用自动装箱并进行非空检查。因为使用布尔值的{{1}}意味着您有3个而不是2个值。 (Michael和Tobiask提出了更好的处理方式)

答案 2 :(得分:21)

使用ApacheCommons BooleanUtils.isTrue()或.isFalse()

答案 3 :(得分:3)

如果someBoolBoolean

if (someBull != null && someBull) {
  //Yeah, true.
}

由于布尔值可以是null,因此请确保通过检查非空来避免NullPointerException

答案 4 :(得分:3)

我做了一点测试:

    Boolean o = null;
    try {
        System.out.println(o ? "yes" : "no");
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        System.out.println((o != false) ? "yes" : "no");
    } catch (Exception e) {
        e.printStackTrace();
    }

输出结果令人惊讶:

java.lang.NullPointerException
    at btest.main(btest.java:10)
java.lang.NullPointerException
    at btest.main(btest.java:15)

第一个NPE是预期的,因为o将被自动装箱(并且因为它为空而失败)。第二种情况出于同样的原因,但感觉并不自然。无论如何,解决方案是:

System.out.println(!Boolean.FALSE.equals(o) ? "yes" : "no");

答案 5 :(得分:2)

但是,您可以将null布尔值与布尔实例进行比较。例如:

Boolean myBool = null;
System.out.println(myBool == Boolean.FALSE);
System.out.println(myBool == Boolean.TRUE);

打印:

false
false

答案 6 :(得分:0)

原始布尔&对象布尔。前者只能是 true false 。后者可以是 true false unknown / undefined 。 (即null)。您使用哪种方法取决于您是要处理两个用例还是三个用例。

答案 7 :(得分:0)

它已经过时了,但Boolean.valueOf(null)false,就像Boolean.valueOf(false) false一样。

答案 8 :(得分:0)

实际上,布尔构造函数接受null,返回FALSE并且不会抛出NullPointerTantrum。

 new Boolean(null);
 <false>

这还有一个额外的好处,就是对"true"字符串Boolean.TRUE.equals提供了一个非常好的响应,但是我们再次受限于只有字符串和布尔值的构造函数。

使用字符串连接可以克服的东西,也是空的。

 new Boolean(""+null);
 <false>

 new Boolean(""+false);
 <false>

 new Boolean(""+new Object());
 <false>

 new Boolean(""+6);
 <false>

 new Boolean(""+new Integer(9));
 <false>

确保java中可用的所有TRUE选项仍然存在。

 new Boolean(""+true);
 <true>

 new Boolean(""+"true");
 <true>

答案 9 :(得分:0)

如果是Java 7+,您可以使用

import java.util.Objects;

if (Objects.equals(someBool, true))

答案 10 :(得分:-1)

由于布尔将为您提供一个对象,因此在处理对象

之前必须始终检查NULL

答案 11 :(得分:-2)

如果为null,则会出现NullPointerException