Operador condicional Java?: Tipo de resultado

Estou um pouco intrigado com o operador condicional. Considere as duas linhas seguintes:

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

Por que f1 se torna nulo e a segunda instrução lança uma NullPointerException?

Langspec-3.0 para 15.25 diz:

Caso contrário, o segundo e o terceiro operandos são do tipo S1 e S2, respectivamente. Seja T1 o tipo que resulta da aplicação da conversão de boxe em S1 e T2 seja o tipo que resulta da aplicação da conversão de boxe em S2. O tipo da expressão condicional é o resultado da aplicação da conversão de captura (§5.1.10) em lub (T1, T2) (§15.12.2.7).

Então parafalse?1.0f:null T1 é flutuante e T2 é do tipo nulo. Mas qual é o resultado delub(T1,T2)? Isso para 15.12.2.7 é um pouco demais ...

BTW, eu estou usando 1.6.0_18 no Windows.

PS: eu sei dissoFloat f2 = false? (Float) 1.0f: false? (Float) 1.0f: null; não joga NPE.

questionAnswers(5)

yourAnswerToTheQuestion