发生的情况是Java编译器首先尝试使等式两边的表达式类型
:相同。在这种情况下,它将自动装箱
5到
Integer;请注意,这
null是的有效值
Integer。整个三元表达式的结果是
Integer。您分配一个
int,所以
Integer随后autounboxed。
本质上,编译器会应用自动装箱和-unboxing,以便该行如下所示:
int test = (something != 0 ? Integer.valueOf(5) : null).intValue();
实际上,自动拆箱
null会导致
NullPointerException。
那么,为什么Java编译器不会像这样获取废话呢?
因为Java语言的设计者以这样的方式定义了该语言,因此无需决定必须将其视为错误…
Java语言规范的15.25节解释了如何确定整个表达式的类型。



