Heim >Java >javaLernprogramm >Warum lässt der ternäre Operator Null zu, während dies bei der If-Anweisung nicht der Fall ist?

Warum lässt der ternäre Operator Null zu, während dies bei der If-Anweisung nicht der Fall ist?

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 18:04:01856Durchsuche

Why Does the Ternary Operator Allow Null While the If Statement Does Not?

NullPointerException in Java: Ternärer Operator vs. If-Anweisung

Bedenken Sie den folgenden Java-Codeausschnitt:

<code class="java">public class Main {

    private int temp() {
        return true ? null : 0; // No compiler error
    }

    private int same() {
        if (true) {
            return null; // Compile-time error
        } else {
            return 0;
        }
    }

    public static void main(String[] args) {
        Main m = new Main();
        System.out.println(m.temp());
        System.out.println(m.same());
    }
}</code>

Frage: Warum erzeugt die temp()-Methode (unter Verwendung eines ternären Operators) keinen Compilerfehler, während dies bei der same()-Methode (unter Verwendung einer if-Anweisung) der Fall ist?

Antwort: Die Der Java-Compiler interpretiert Null als Nullreferenz auf eine Ganzzahl. Bei Verwendung des bedingten Operators werden Autoboxing-/Unboxing-Regeln angewendet (gemäß der Java Language Specification, 15.25). Dadurch kann der Compiler fortfahren, ohne einen Fehler auszugeben, auch wenn zur Laufzeit eine NullPointerException ausgelöst wird.

Im Gegensatz dazu wendet der Compiler bei Verwendung einer if-Anweisung Standardregeln für die Typprüfung an. Da null kein gültiger int-Wert ist, wird ein Fehler bei der Kompilierung erzeugt.

Das obige ist der detaillierte Inhalt vonWarum lässt der ternäre Operator Null zu, während dies bei der If-Anweisung nicht der Fall ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn