Почему NullPointerException происходит коротким IF
Я написал короткий Java-код, который вызывает NullPointerException. У кого-нибудь есть объяснение? Код:
int val = 2;
Boolean result = (val == 0) ? false : ((val == 1) ? true : null);
Кроме того, следующий код (упрощенная версия) вызовет NullPointerException:
Object result = (false) ? false : (false ? true : null);
Но это:
int val = 2;
Boolean result = (val == 0) ? Boolean.FALSE : ((val == 1) ? true : null);
и это:
Object result = (false) ? Boolean.FALSE : (false ? true : null);
или это:
Object result = (false) ? (Boolean)false : (false ? true: null);
не
Ответы
Ответ 1
Я думаю, что происходит, что ((val == 1) ? true : null)
всегда возвращает null
, а затем пытается распаковать его в boolean
. Это вызывает исключение нулевого указателя.
После того, как я сказал это, @JonSkeet пометил ваш вопрос как дубликат из-за NullPointerException в тернарном выражении с нулевым длинным. В ответе есть гораздо более подробное объяснение.
Ответ 2
int val = 2;
boolean result = (val == o)? false true;//удаляем null из кода и заменяем его на true.
Ответ 3
В java boolean
допускается только true
и false
, но Boolean позволяет true
false
и NULL