Este trecho de código funciona bem: -
Integer nullInt = null;
if (1 <= 3) {
Integer secondNull = nullInt;
} else {
Integer secondNull = -1;
}
System.out.println("done");
Mas isso gera uma exceção de ponteiro nulo, enquanto o Eclipse avisa que há necessidade de descompactação automática: -
Integer nullInt = null;
Integer secondNull = 1 <= 3 ? nullInt : -1;
System.out.println("done");
Por que é assim, alguém pode guiar por favor?
java
if-statement
conditional-operator
91StarSky
fonte
fonte
Tenho certeza de que os argumentos para o operador ternário precisam ser desse mesmo tipo. Desde que você use -1 e algum
nullint
compilador constante tenta desmarcarnullint
para obter valor. E depois autobox para armazenar nasecondNull
variável.fonte
Isso ocorre quando os dois operandos do operador condicional
? :
são um tipo primitivo e seu tipo de referência em caixa, uma conversão de unboxing é feita ( JLS §15.25.2 ):Em geral, substituir uma
if
instrução por uma? :
expressão nem sempre preserva o significado do código, porque a? :
própria expressão precisa ter um tipo de tempo de compilação. Isso significa que quando os tipos dos dois operandos são diferentes, uma conversão deve ser feita em um ou ambos, para que o resultado tenha um tipo consistente em tempo de compilação.fonte
Este funcionou (em Java 1.8):
fonte