Java bedingter Operator?: Ergebnistyp
Ich bin etwas verwirrt über den bedingten Operator. Betrachten Sie die folgenden zwei Zeilen:
Float f1 = false? 1.0f: null;
Float f2 = false? 1.0f: false? 1.0f: null;
Warum wird f1 zu null und die zweite Anweisung löst eine NullPointerException aus?
Langspec-3.0 Abs. 15.25 lautet:
nsonsten sind der zweite und der dritte Operand vom Typ S1 bzw. S2. Sei T1 der Typ, der sich aus der Anwendung der Boxing-Konvertierung auf S1 ergibt, und sei T2 der Typ, der sich aus der Anwendung der Boxing-Konvertierung auf S2 ergibt. Der Typ des bedingten Ausdrucks ergibt sich aus der Anwendung der Capture-Konvertierung (§5.1.10) auf lub (T1, T2) (§15.12.2.7).
So fürfalse?1.0f:null
T1 ist Float und T2 ist der Null-Typ. Aber was ist das Ergebnis vonlub(T1,T2)
? Dieser Paragraph 15.12.2.7 ist einfach ein bisschen zu viel ...
BTW, ich verwende 1.6.0_18 unter Windows.
PS: Ich weiß, dassFloat f2 = false? (Float) 1.0f: false? (Float) 1.0f: null;
wirft kein NPE.