最佳答案
观察这种情况让我非常困惑:
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
与包装的原语一起抛出而不是与 没错对象类型一起抛出时,它看起来是不一致的。