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.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage