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.