Kann mir jemand erklären, warum im ersten Fall Nullzeiger erkannt wurde, aber nicht auf der anderen?java ternäre Bedingungen merkwürdig null Zeiger Ausnahme
Vielleicht sieht er immer auf dem ersten Typ, aber warum tut er dies nur, wenn die Bedingung falsch ist ..
@Test
public void test1() {
final Integer a = null;
final Integer b = false ? 0 : a;
//===> NULL POINTER EXCEPTION
}
@Test
public void test2() {
final Integer b = false ? 0 : null;
//===>NOT NULL POINTER EXCEPTION
}
@Test
public void test3() {
final Integer a = null;
final Integer b = true ? 0 : a;
//===>NOT NULL POINTER EXCEPTION
}
@Test
public void test4() {
final Integer a = null;
final Integer b = false ? new Integer(0) : a;
//===> NOT NULL POINTER EXCEPTION
}
@Test
public void test5() {
final Integer a = null;
final Integer b = false ? a : 0;
//===>NOT NULL POINTER EXCEPTION
}
Mögliche dupe: http://stackoverflow.com/questions/12763983/nullpointerexception-through-auto-boxing-behavior-of-java-ternary-operator (Ich stimme nicht, um die Frage nicht zu schließen) –
"Wenn einer der zweiten und dritten Operanden ist vom Grundtyp T, und der Typ des anderen ist das Ergebnis der Anwendung der Boxumwandlung (§5.1.7) auf T, dann ist der Typ des Bedingungsausdrucks T. Warum also Test3 und Test5 nicht NPE? Entschuldigung, ich habe es nicht bekommen –