„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum lässt der ternäre Operator eine Null-Rückgabe für int zu, während dies bei einer if-Anweisung nicht der Fall ist?

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

Veröffentlicht am 13.11.2024
Durchsuche:687

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:

int temp() {
    return true ? null : 0;
}

In diesem Code weist der ternäre Operator der Variablen temp null zu, wenn die ausgewertete Bedingung „true“ ist, andernfalls weist er 0 zu. Der Compiler lässt diese Zuweisung zu, ohne dass Fehler ausgegeben werden. 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 lässt die if-Anweisung solche Nullzuweisungen an Variablen von nicht zu primitive Typen. Zum Beispiel:

int same() {
    if (true) {
        return null;
    } else {
        return 0;
    }
}

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 liegt an den Compilerregeln für Autoboxing und Unboxing: 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 wird die if-Anweisung nicht ausgeführt Dieser Unboxing-Prozess wird durchgeführt, und das Nullliteral bleibt als Nullreferenz auf Object erhalten. Da der Rückgabetyp der same()-Methode int ist, kann der Compiler die Nullreferenz nicht in int konvertieren, daher der Fehler bei der Kompilierung.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3