Dlaczego to rzuca NullPointerException
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;
}
podczas gdy to nie jest
public static void main(String[] args) throws Exception {
Boolean b = true ? null : false;
System.out.println(b); // null
}
?
Rozwiązaniem jest przy okazji zastąpienie false
przez, Boolean.FALSE
aby uniknąć null
rozpakowania do boolean
- co nie jest możliwe. Ale to nie jest pytanie. Pytanie brzmi: dlaczego ? Czy są jakieś odniesienia w JLS, które potwierdzają to zachowanie, szczególnie w przypadku drugiego przypadku?