首页 > Java > java教程 > 正文

为什么三元运算符允许 Null,而 If 语句不允许?

Linda Hamilton
发布: 2024-11-04 18:04:01
原创
852 人浏览过

Why Does the Ternary Operator Allow Null While the If Statement Does Not?

Java 中的 NullPointerException:三元运算符与 If 语句

考虑以下 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板