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
Libérer: 2024-11-05 07:30:02
original
1033 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal