微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用三元运算符将 null 作为 int 返回,但 if 语句不允许

如何解决使用三元运算符将 null 作为 int 返回,但 if 语句不允许

编译器解释null为对 an 的空引用,Integer为条件运算符应用自动装箱/拆箱规则(如Java 语言规范 15.25中所述),然后愉快地继续前进。这将在运行时生成一个NullPointerException,您可以通过尝试来确认。

解决方法

让我们看一下以下代码段中的简单 Java 代码:

public class Main {

    private int temp() {
        return true ? null : 0;
        // No compiler error - the compiler allows a return value of null
        // in a method signature that returns an int.
    }

    private int same() {
        if (true) {
            return null;
            // The same is not possible with if,// and causes a compile-time error - incompatible types.
        } else {
            return 0;
        }
    }

    public static void main(String[] args) {
        Main m = new Main();
        System.out.println(m.temp());
        System.out.println(m.same());
    }
}

在这个最简单的 Java 代码中,temp()即使函数的返回类型是
,该方法也不会发出编译器错误int,并且我们正在尝试返回值null(通过语句return true ? null : 0;)。编译时,这显然会导致运行时异常NullPointerException

但是,如果我们用一个if语句(如在same()方法中)来表示三元运算符,这似乎也是错误的,这 确实会 引发编译时错误!为什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。