Логическая ошибка в объекте и булевом переменном в JAVA - программирование
Подтвердить что ты не робот

Логическая ошибка в объекте и булевом переменном в JAVA

Я объявляю логическую переменную. Например Boolean dataVal=null; Теперь, если я выполняю следующий сегмент кода:

if(dataVal)
    System.out.println("\n\NULL value in dataVal: "+dataVal);
else
    System.out.println("\n\nvalue in dataVal: "+dataVal);

Я получаю NULLPointerException. Ну, я знаю его очевидное, но мне нужно знать причину этого.

4b9b3361

Ответ 1

Когда вы вычисляете логическое значение объекта Boolean, Java распаковывает значение (функция autoboxing, начиная с 1.5). Итак, реальный код: dataVal.booleanValue(). Затем он бросает NullPointerException. При любом бокс-значении unboxing нулевого объекта выдает это исключение.

До 1.5 вам нужно было вручную удалить значение: if (dataVal.booleanValue()), чтобы оно было более очевидным (более подробное:)

Ответ 2

Потому что dataVal отправляется на boolean с помощью Boolean.booleanValue(), который переводится на null.booleanValue(), что приводит к исключению NullPointerException.

Ответ 3

Вы можете взглянуть на спецификацию проблем с распаковкой, описывается ваша ситуация здесь раздел 5.1.8 Конвертирование Unboxing: если значение r равно null, преобразование распаковки вызывает исключение NullPointerException

Это означает, что ваш if (/* Boolean object */) никогда не будет распакован в булевский примитивный тип и, следовательно, выбросит NPE, потому что вы делаете недопустимый if(null).

Кстати, распаковка будет работать, если у вас есть:

final Boolean booleanTest = new Boolean (true);
if (booleanTest) {
    // Do something
}

Ответ 4

Boolean (class)!= boolean (примитивный тип).

Java пытается получить примитивное значение, вызывающее dataVal.booleanValue(). Поскольку dataVal имеет значение null, вы получаете исключение с нулевым указателем.

Ответ 5

if(null) не является допустимым выражением, простым как это.

Под капюшонами виртуальная машина использует автоматический бокс... поэтому вы получаете NullPointerException.