观察这种情况让我非常困惑:
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
...
}
Run Code Online (Sandbox Code Playgroud)
因此,我认为首先执行装箱操作(即java尝试从中提取int值null),并且比较操作具有较低的优先级,这就是抛出异常的原因.
问题是:为什么在Java中以这种方式实现它?为什么拳击优先于比较参考?或者为什么他们没有null在拳击前实施验证?
目前,当NullPointerException使用包装的基元抛出它时看起来不一致,并且不会抛出真正的对象类型.