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.