Maison >Java >javaDidacticiel >Pourquoi un retour Null provoque-t-il une NullPointerException dans un opérateur ternaire mais une erreur de compilation dans une instruction If ?

Pourquoi un retour Null provoque-t-il une NullPointerException dans un opérateur ternaire mais une erreur de compilation dans une instruction If ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-05 07:30:021009parcourir

Why Does a Null Return Cause a NullPointerException in a Ternary Operator but a Compile-Time Error in an If Statement?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn