Vor einigen Tagen stieß ich auf ein faszinierendes Szenario, in dem ich keine Dokumentation darüber finden konnte, wie oder warum Java Folgendes zulässt. (Dieses Snippet ist nur eine vereinfachte Form des Fehlers.)
@Test
public void test() {
boolean bool = false;
Integer intVal = Integer.valueOf(5);
Long longVal = null;
Long result = bool ? intVal : longVal;
System.out.println(" > " + result);
}
im obigen Ausschnitt:
Wenn der Bool = true ist, erhalten Sie den Wert '5'.
Wenn jedoch bool = false ist, wird beim Versuch, die ternäre Operation auszuwerten, eine Nullzeigerausnahme angezeigt. NICHT die Druckanweisung.
Um dies zu beheben, ändere ich einfach 'Ergebnis' in
Long result = bool ? Long.valueOf(intVal) : longVal;
Wenn Sie dies tun, erhalten Sie das erwartete Verhalten, das ich brauchte:
Wenn der Bool = true ist, erhalten Sie den Wert '5'.
aber wenn bool = false, dann erhalten Sie 'null'
Der lustige Teil ist nun, dass Java Sie NICHT kompilieren lässt, wenn Sie dies in eine normale if / else-Anweisung aufteilen
longVal = intVal;
aber es fängt das nicht über den ternären Operator ab. Was macht Java also, um den Nullpunkt im ursprünglichen Snippet auf Null zu setzen?
(Java 11)