Heim  >  Artikel  >  Java  >  Warum verursacht eine Null-Rückgabe eine NullPointerException in einem ternären Operator, aber einen Fehler bei der Kompilierung in einer If-Anweisung?

Warum verursacht eine Null-Rückgabe eine NullPointerException in einem ternären Operator, aber einen Fehler bei der Kompilierung in einer If-Anweisung?

Barbara Streisand
Barbara StreisandOriginal
2024-11-05 07:30:02949Durchsuche

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

Null-Rückgaben in ternären Operatoren vs. If-Anweisungen

Bedenken Sie den folgenden Java-Codeausschnitt:

<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>

In die temp()-Methode, der ternäre Operator true ? null : 0 prüft, ob true wahr ist und gibt null zurück, andernfalls wird 0 zurückgegeben. Obwohl der Rückgabetyp der Methode ein int ist, lässt der Compiler die Rückgabe von null zu. Beim Ausführen des Codes wird jedoch eine NullPointerException ausgelöst.

In der Methode same() versucht die if-Anweisung, null zurückzugeben, wenn „true“ wahr ist, aber der Compiler meldet einen Fehler bei der Kompilierung aufgrund einer inkompatiblen Rückgabe Typen.

Warum der Unterschied?

Der Hauptunterschied besteht darin, wie der Compiler null im ternären Operator und in der if-Anweisung interpretiert. Im ternären Operator wird null als Nullverweis auf ein Integer-Objekt behandelt. Gemäß den Autoboxing- und Unboxing-Regeln (Java Language Specification, 15.25) wird der Nullwert beim Unboxing automatisch in einen int umgewandelt, was zu einer NullPointerException führt, wenn der int verwendet wird.

Im Gegensatz dazu prüft die if-Anweisung explizit die Wahrhaftigkeit des Ausdrucks true und versucht, null zurückzugeben, was mit dem deklarierten Rückgabetyp eines int nicht kompatibel ist. Daher generiert der Compiler einen Kompilierzeitfehler, um eine fehlerhafte Codeausführung zu verhindern.

Das obige ist der detaillierte Inhalt vonWarum verursacht eine Null-Rückgabe eine NullPointerException in einem ternären Operator, aber einen Fehler bei der Kompilierung in einer If-Anweisung?. 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