Renvois nuls dans les opérateurs ternaires par rapport aux instructions If
Considérez l'extrait de code Java suivant :
<code class="java">public class Main { private int temp() { return true ? null : 0; } private int same() { if (true) { return null; } else { return 0; } } public static void main(String[] args) { Main m = new Main(); System.out.println(m.temp()); System.out.println(m.same()); } }</code>
Dans la méthode temp(), l'opérateur ternaire true ? null : 0 vérifie si true est vrai et renvoie null, sinon il renvoie 0. Bien que le type de retour de la méthode soit un int, le compilateur autorise le renvoi de null. Cependant, lors de l'exécution du code, une NullPointerException est levée.
Dans la méthode same(), l'instruction if tente de renvoyer null si true est vrai, mais le compilateur signale une erreur de compilation en raison d'un retour incompatible. types.
Pourquoi la différence ?
La principale différence réside dans la manière dont le compilateur interprète null dans l'opérateur ternaire et l'instruction if. Dans l'opérateur ternaire, null est traité comme une référence null à un objet Integer. Selon les règles d'autoboxing et de unboxing (Java Language Spécification, 15.25), le null est automatiquement converti en int lors du déballage, ce qui entraîne une NullPointerException lorsque l'int est utilisé.
En revanche, l'instruction if vérifie explicitement le la véracité de l'expression true et tente de renvoyer null, ce qui est incompatible avec le type de retour déclaré d'un int. Par conséquent, le compilateur génère une erreur de compilation pour empêcher une exécution incorrecte du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!