gpt4 book ai didi

java - 为什么 Java 编译器有时允许对 null 进行拆箱?

转载 作者:太空狗 更新时间:2023-10-29 22:45:20 27 4
gpt4 key购买 nike

例如:

int anInt = null;

编译时失败但是

public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("" + getSomeVal());
}
}
public static int getSomeVal() {
return new Random().nextBoolean() ? 1 : null;
}

在运行时(通常)失败。试图只返回 null 也会导致编译错误,所以我假设有多个路径导致编译器推断 null 可能是一个自动装箱的 整数?为什么 javac 不会在两种情况下都编译失败并出现相同的错误?

最佳答案

在第一种情况下,编译器知道您正在尝试拆箱 null 的编译时常量。

在第二种情况下,条件表达式的类型是 Integer,因此您实际上是在编写:

Integer tmp = new Random().nextBoolean() ? 1 : null;
return (int) tmp;

...所以拆箱不会发生在常量表达式上,编译器会允许它。

如果您通过那里 拆箱将其更改为强制条件表达式为int 类型,它将失败:

// Compile-time failure
return new Random().nextBoolean() ? 1 : (int) null;

关于java - 为什么 Java 编译器有时允许对 null 进行拆箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11897883/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com