我正在阅读jls §5.1.7,它说有9种类型的拳击,第9种是拳击From the null type to the null type
然后我读到null
的{{3}}会引发NullPointerException
。好的,很明显。 那么为什么null
的拳击不会引发NullPointerException
以及拳击null
值的用途是什么?
答案 0 :(得分:1)
将null
转换为Integer不会抛出NullPointerException
,因为null
是任何引用的有效值,例如:
Integer intObject = null; // fine
但是,你不能这样做:
int intPrimitive = intObject; // not fine
因为当您尝试将Integer
转换为int
时,会在后台调用Integer.intValue()
,但调用null引用上的任何方法都会引发NPE:
Object whatever = null;
whatever.anyMethod(); // always throws NPE
因为引用指向null
,而不是所选类型的实际对象。
答案 1 :(得分:0)
我认为您提供的文件给出了答案。 “这条规则是必要的,因为条件运算符将装箱转换应用于其操作数的类型,并在进一步的计算中使用结果。”
如果?:
的第二个和第三个操作数之一不是布尔值或数字表达式,则可以使用装箱。例如,true?1:2
的类型为int
,而true?null:1
的类型为Integer
。在第二个例子中,采用自动装箱。并且在运行时,第二个示例的类型将为null类型,因为当装箱为null类型时,将获得null类型。