Heim > Java > javaLernprogramm > Warum kann ein ternärer Operator in einer Int-Methode Null zurückgeben, eine If-Anweisung jedoch nicht?

Warum kann ein ternärer Operator in einer Int-Methode Null zurückgeben, eine If-Anweisung jedoch nicht?

DDD
Freigeben: 2024-11-05 22:12:02
Original
893 Leute haben es durchsucht

Why Can a Ternary Operator Return Null in an Int Method, But an If Statement Can't?

Bedingungsoperator-Rätsel: Null-Returns in Ternary vs. If-Anweisung

In Java stellt der bedingte (ternäre) Operator ein faszinierendes Rätsel dar, wenn Umgang mit Methodenrückgabetypen. Betrachten Sie den folgenden Code:

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

    private int temp() {
        return true ? null : 0;
        // Compiler allows null return for int method
    }

    private int same() {
        if (true) {
            return null;
            // Compiler error: incompatible types
        } else {
            return 0;
        }
    }

}</code>
Nach dem Login kopieren

In der temp()-Methode lässt der ternäre Operator die Rückgabe von Null zu, obwohl die Methode so deklariert ist, dass sie einen int zurückgibt. Dieses scheinbar kontraintuitive Verhalten wird durch die Interpretation von null durch den Compiler als Nullreferenz auf ein Integer-Objekt erklärt. Anschließend werden Autoboxing-/Unboxing-Regeln für den Bedingungsoperator angewendet, was dazu führt, dass ein Integer-Objekt zurückgegeben wird. Diese Aktion maskiert jedoch eine potenzielle Laufzeit-NullPointerException.

Umgekehrt löst der Versuch, den ternären Operator als if-Anweisung in der same()-Methode darzustellen, aufgrund inkompatibler Typen einen Fehler bei der Kompilierung aus. Dies liegt daran, dass die if-Anweisung es uns nicht erlaubt, null für eine int-zurückgebende Methode zurückzugeben.

Der Kern des Rätsels liegt in der Unterscheidung zwischen dem ternären Operator und der if-Anweisung. Der ternäre Operator ermöglicht es uns, Werte basierend auf einer Bedingung zurückzugeben, während die if-Anweisung von uns verlangt, den Rückgabetyp explizit anzugeben. Daher kann der ternäre Operator Null-Rückgaben in int-Methoden einschleusen, wenn wir nicht aufpassen, während die if-Anweisung eine Typprüfung erzwingt, die sicherstellt, dass der zurückgegebene Wert mit der Methodensignatur kompatibel ist.

Das obige ist der detaillierte Inhalt vonWarum kann ein ternärer Operator in einer Int-Methode Null zurückgeben, eine If-Anweisung jedoch nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage