Ce morceau de code fonctionne bien: -
Integer nullInt = null;
if (1 <= 3) {
Integer secondNull = nullInt;
} else {
Integer secondNull = -1;
}
System.out.println("done");
Mais cela lève une exception de pointeur nul, tandis qu'Eclipse avertit qu'il est nécessaire de décompresser automatiquement: -
Integer nullInt = null;
Integer secondNull = 1 <= 3 ? nullInt : -1;
System.out.println("done");
Pourquoi en est-il ainsi, quelqu'un peut-il guider s'il vous plaît?
java
if-statement
conditional-operator
91StarSky
la source
la source
Je suis à peu près sûr que les arguments de l'opérateur ternaire doivent être du même type. Puisque vous utilisez -1 et un
nullint
compilateur constant, essayeznullint
de décompresser pour obtenir de la valeur. Et puis le mettre en boîte automatique pour le stocker dans unesecondNull
variable.la source
En effet, lorsque les deux opérandes de l'opérateur conditionnel
? :
sont de type primitif et son type de référence encadré, une conversion de décodage est effectuée ( JLS §15.25.2 ):En général, le remplacement d'une
if
instruction par une? :
expression ne préserve pas toujours la signification du code, car l'? :
expression elle-même doit avoir un type au moment de la compilation. Cela signifie que lorsque les types des deux opérandes sont différents, une conversion doit être effectuée en un ou les deux afin que le résultat ait un type de compilation cohérent.la source
Celui-ci a fonctionné (en Java 1.8):
la source