java – 将null返回为int三元运算符允许的int,而不是if语句

让我们看看以下代码段中的简单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代码中,即使函数的返回类型是int,temp()方法也不会发出编译错误,我们试图返回值null(通过语句返回true?null:0;).编译时,这显然会导致运行时异常NullPointerException.

但是,如果我们使用if语句(如在same()方法中)表示三元运算符,则会出现同样的错误,这会发出编译时错误!为什么?

解决方法:

编译器将null解释为对Integer的空引用,对条件运算符应用自动装箱/取消装箱规则(如Java Language Specification, 15.25中所述),并快乐地进行操作.这将在运行时生成NullPointerException,您可以通过尝试来确认它.

上一篇:java – 为什么对象实例(null)上的toString()不会抛出NPE?


下一篇:我应该使用哪个@NotNull Java注释?