Heim >Java >javaLernprogramm >Warum lässt der ternäre Operator Null zu, während dies bei der If-Anweisung nicht der Fall ist?
Bedenken Sie den folgenden Java-Codeausschnitt:
<code class="java">public class Main { private int temp() { return true ? null : 0; // No compiler error } private int same() { if (true) { return null; // Compile-time error } else { return 0; } } public static void main(String[] args) { Main m = new Main(); System.out.println(m.temp()); System.out.println(m.same()); } }</code>
Frage: Warum erzeugt die temp()-Methode (unter Verwendung eines ternären Operators) keinen Compilerfehler, während dies bei der same()-Methode (unter Verwendung einer if-Anweisung) der Fall ist?
Antwort: Die Der Java-Compiler interpretiert Null als Nullreferenz auf eine Ganzzahl. Bei Verwendung des bedingten Operators werden Autoboxing-/Unboxing-Regeln angewendet (gemäß der Java Language Specification, 15.25). Dadurch kann der Compiler fortfahren, ohne einen Fehler auszugeben, auch wenn zur Laufzeit eine NullPointerException ausgelöst wird.
Im Gegensatz dazu wendet der Compiler bei Verwendung einer if-Anweisung Standardregeln für die Typprüfung an. Da null kein gültiger int-Wert ist, wird ein Fehler bei der Kompilierung erzeugt.
Das obige ist der detaillierte Inhalt vonWarum lässt der ternäre Operator Null zu, während dies bei der If-Anweisung nicht der Fall ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!