Почему это бросок NullPointerException
BOOLEANS, условные операторы и Autoboxing
public static void main(String[] args) throws Exception {
Boolean b = true ? returnsNull() : false; // NPE on this line.
System.out.println(b);
}
public static Boolean returnsNull() {
return null;
}
в то время как это не
public static void main(String[] args) throws Exception {
Boolean b = true ? null : false;
System.out.println(b); // null
}
?
Решение по пути замены false
на Boolean.FALSE
, чтобы избежать null
быть распакованный к boolean
--which не представляется возможным. Но это не вопрос. Вопрос почему? Есть ли ссылки в JLS, которые подтверждают это поведение, особенно второго случая?
wow, autoboxing - это бесконечный источник ... er ... сюрпризов для java-программиста, не так ли? :-) – leonbloy
У меня была аналогичная проблема, и я удивился тому, что она потерпела неудачу на VM OpenJDK, но работала на HotSpot VM ... Напишите один раз, бегите куда угодно! – kodu