考虑以下 Java 代码片段:
<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>
问题: 为什么 temp() 方法(使用三元运算符)不会产生编译器错误,而 same() 方法(使用 if 语句)却会产生编译器错误?
答案: Java 编译器将 null 解释为对 Integer 的 null 引用。使用条件运算符时,将应用自动装箱/拆箱规则(根据 Java 语言规范 15.25)。这允许编译器继续执行而不会发出错误,即使在运行时会抛出 NullPointerException。
相反,当使用 if 语句时,编译器会应用标准类型检查规则。由于 null 不是有效的 int 值,因此会产生编译时错误。
以上是为什么三元运算符允许 Null,而 If 语句不允许?的详细内容。更多信息请关注PHP中文网其他相关文章!