Heim > Java > javaLernprogramm > Hauptteil

Warum erlaubt der ternäre Operator eine Null-Rückgabe für int, während dies bei einer if-Anweisung nicht der Fall ist?

Susan Sarandon
Freigeben: 2024-11-05 01:09:01
Original
288 Leute haben es durchsucht

Why Does the Ternary Operator Allow Null Return for int While an if Statement Doesn't?

Ternärer Operator vs. if-Anweisung für Null-Rückgabe von int

In Java ermöglicht der ternäre Operator (?:) die Zuweisung von null für eine Variable vom Typ int, auch wenn int ein primitiver Datentyp ist, der keine Nullwerte unterstützt. Betrachten Sie den folgenden Codeausschnitt:

<code class="java">int temp() {
    return true ? null : 0;
}</code>
Nach dem Login kopieren

In diesem Code weist der ternäre Operator der Variablen temp null zu, wenn „true“ die ausgewertete Bedingung ist, andernfalls weist er 0 zu. Der Compiler lässt diese Zuweisung zu, ohne Fehler auszugeben. Wenn die Methode jedoch ausgeführt wird, löst sie zur Laufzeit eine NullPointerException aus, da null kein gültiger Wert für int ist.

Im Gegensatz zum ternären Operator erlaubt die if-Anweisung solche Nullzuweisungen an Variablen von nicht primitive Typen. Zum Beispiel:

<code class="java">int same() {
    if (true) {
        return null;
    } else {
        return 0;
    }
}</code>
Nach dem Login kopieren

Dieser Code generiert einen Kompilierzeitfehler mit der Meldung „Inkompatible Typen: null kann nicht in int konvertiert werden.“ Der Grund für diese Diskrepanz liegt in der Art und Weise, wie der Compiler den Wert Null behandelt.

Im Fall des ternären Operators interpretiert der Compiler das Nullliteral als Nullreferenz auf eine Ganzzahl, die Wrapper-Klasse für int. Dies ist auf Compilerregeln für Autoboxing und Unboxing zurückzuführen: Bei der Konvertierung von einem primitiven Typ in einen Objekttyp verpackt die Java Virtual Machine (JVM) den primitiven Wert automatisch in den entsprechenden Objekt-Wrapper.

Da int ein ist Bei einem primitiven Typ versucht der Compiler, den vom ternären Operator zurückgegebenen Nullwert zu entpacken, was zur NullPointerException führt.

Andererseits führt die if-Anweisung diesen Entpackungsprozess nicht durch und das Nullliteral bleibt bestehen als Nullreferenz auf Object. Da der Rückgabetyp der same()-Methode int ist, kann der Compiler die Nullreferenz nicht in int konvertieren, daher der Fehler bei der Kompilierung.

Das obige ist der detaillierte Inhalt vonWarum erlaubt der ternäre Operator eine Null-Rückgabe für int, während dies bei einer if-Anweisung nicht der Fall ist?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!