Подтвердить что ты не робот

Boolean!= False

В Java вы обычно говорите, что

if(someBool != false)

совпадает с

if(someBool)

Но что, если someBool не относится к типу boolean, а boolean, а его значение null?

4b9b3361

Ответ 1

Он выкинет NullPointerException (autounbing null выдает NPE).

Но это означает, что вы не должны допускать значение null. Либо используйте значение по умолчанию, либо не используйте autounboxing и выполняйте непустую проверку. Потому что использование значения null для булева означает, что у вас есть 3, а не 2 значения. (Более эффективные способы обращения с ним были предложены Майклом и Тобиасом)

Ответ 2

Если вы хотите обрабатывать экземпляры Boolean, а также примитивы и быть нулевыми, вы можете использовать это:

if(Boolean.TRUE.equals(someBool))

Ответ 3

Используйте ApacheCommons BooleanUtils.isTrue() или .isFalse()

Ответ 4

Если someBool есть Boolean

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

Так как Boolean может быть null, убедитесь, что вы избегаете NullPointerException, проверяя значение null.

Ответ 5

Я сделал небольшой тест:

    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 будет autounboxed (и это терпит неудачу, потому что оно null). Второе происходит по той же причине, но это не кажется естественным. Во всяком случае, решение должно сделать:

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

Ответ 6

Однако вы можете сравнить нулевой Boolean с булевым экземпляром. Например:

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

Отпечатки:

false
false

Ответ 7

Хорошие иллюстрации разницы между примитивным булевым и объектом Boolean. Первый может быть только true или false. Последнее может быть true, false или unknown/undefined. (т.е. null). Что вы используете, зависит от того, хотите ли вы иметь дело с двумя вариантами использования или тремя.

Ответ 8

Он старый, но Boolean.valueOf(null) равен false, так же как Boolean.valueOf(false) есть false.

Ответ 9

Фактически логический конструктор принимает значение 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>

Обеспечение того, что все TRUE-опции, доступные в java, все еще остаются.

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

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

Ответ 10

Поскольку Boolean даст вам объект, вы должны всегда проверять NULL перед тем, как работать с объектом

Ответ 11

Если его значение null, вы получите исключение NullPointerException