Operador condicional de Java?: Tipo de resultado

Estoy un poco desconcertado sobre el operador condicional. Considere las siguientes dos líneas:

Float f1 = false? 1.0f: null;
Float f2 = false? 1.0f: false? 1.0f: null;

¿Por qué f1 se vuelve nulo y la segunda instrucción arroja una NullPointerException?

Langspec-3.0 para 15.25 dice:

De lo contrario, el segundo y tercer operandos son de los tipos S1 y S2 respectivamente. Deje que T1 sea el tipo que resulta de aplicar la conversión de boxeo a S1, y que T2 sea el tipo que resulta de aplicar la conversión de boxeo a S2. El tipo de expresión condicional es el resultado de aplicar la conversión de captura (§5.1.10) a lub (T1, T2) (§15.12.2.7).

Entonces parafalse?1.0f:null T1 es flotante y T2 es el tipo nulo. ¿Pero cuál es el resultado delub(T1,T2)? Este párrafo 15.12.2.7 es demasiado ...

Por cierto, estoy usando 1.6.0_18 en Windows.

PD: lo séFloat f2 = false? (Float) 1.0f: false? (Float) 1.0f: null; no arroja NPE.

Respuestas a la pregunta(5)

Su respuesta a la pregunta