我对观察到的这种情况感到非常困惑:
Integer i = null;
String str = null;
if (i == null) { //Nothing happens
...
}
if (str == null) { //Nothing happens
}
if (i == 0) { //NullPointerException
...
}
if (str == "0") { //Nothing happens
...
}
据我所知,装箱操作先执行(即Java试图从null
中提取int值),比较操作的优先级较低,这就是为什么会抛出异常的原因。
问题是:为什么Java要实现成这样呢?为什么装箱的优先级比比较引用还要高?或者为什么他们没有在装箱之前对null
进行验证呢?
目前看来,当使用包装的原始类型时抛出NullPointerException
,而使用真实对象类型时却没有抛出,这显得不一致。