Este código funciona bien: -
Integer nullInt = null;
if (1 <= 3) {
Integer secondNull = nullInt;
} else {
Integer secondNull = -1;
}
System.out.println("done");
Pero esto arroja una excepción de puntero nulo, mientras que Eclipse advierte que hay necesidad de unboxing automático:
Integer nullInt = null;
Integer secondNull = 1 <= 3 ? nullInt : -1;
System.out.println("done");
¿Por qué es así? ¿Alguien puede guiar por favor?
java
if-statement
conditional-operator
91StarSky
fuente
fuente
Estoy bastante seguro de que los argumentos para el operador ternario deben ser de este mismo tipo. Como usas -1 y algún
nullint
compilador constante intenta desempaquetarnullint
para obtener valor. Y luego autobox para almacenar ensecondNull
variable.fuente
Esto se debe a que cuando los dos operandos para el operador condicional
? :
son un tipo primitivo y su tipo de referencia en caja, se realiza una conversión de unboxing ( JLS §15.25.2 ):En general, reemplazar una
if
declaración con una? :
expresión no siempre conserva el significado del código, porque la? :
expresión en sí misma debe tener un tipo de tiempo de compilación. Eso significa que cuando los tipos de los dos operandos son diferentes, se debe realizar una conversión a uno o ambos para que el resultado tenga un tipo de tiempo de compilación consistente.fuente
Este funcionó (en Java 1.8):
fuente