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