Тип троичного условного выражения
1 <= 3 ? nullInt : -1
равен int
(JLS содержит несколько таблиц, которые описывают тип троичного условного оператора в зависимости от типов 2-го и 3-го операндов).
Поэтому, когда он пытается распаковать nullInt
в int
, NullPointerException
выбрасывается.
Чтобы получить поведение вашего фрагмента if-else, вам нужно написать:
1 <= 3 ? nullInt : Integer.valueOf(-1)
Теперь тип выражения будет Integer
, поэтому распаковка не будет.