Operatore condizionale Java?: Tipo di risultato

Sono un po ‘perplesso riguardo all’operatore condizionale. Considera le seguenti due linee:

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

Perché f1 diventa nullo e la seconda istruzione lancia una NullPointerException?

Langspec-3.0 para 15.25 sais:

Altrimenti, il secondo e il terzo operando sono rispettivamente dei tipi S1 e S2. Sia T1 il tipo risultante dall’applicazione della conversione di boxing in S1, e sia T2 il tipo risultante dall’applicazione della conversione di boxing in S2. Il tipo di espressione condizionale è il risultato dell’applicazione della conversione di cattura (§5.1.10) a lub (T1, T2) (§15.12.2.7).

Quindi per false?1.0f:null T1 è Float e T2 è il tipo null. Ma qual è il risultato di lub(T1,T2) ? Questo para 15.12.2.7 è solo un po ‘troppo …

    A proposito, sto usando 1.6.0_18 su Windows.

    PS: So che Float f2 = false? (Float) 1.0f: false? (Float) 1.0f: null; Float f2 = false? (Float) 1.0f: false? (Float) 1.0f: null; non getta NPE.