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