Почему 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