Integer i = null;
if (i == 3)为什么上面的第二行抛出一个NullPointerException,IMHO,这只有一个意思,那就是包装器对象i将被取消装箱,这会产生如下的异常:
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(null);
int x = list.get(0);编辑:你能为我提供一些格式的文档吗?
发布于 2012-02-07 22:07:05
它抛出了NPE,因为编译器为你做了以下“魔术”:
Integer i = null;
if (i.intValue() == 3)显然,当i为null时,i.intValue()会抛出NPE。
发布于 2012-02-07 22:08:57
当您尝试将包装的数字与基元数字进行比较时,包装器将自动取消装箱。如果此时包装器为空,则会得到一个NullPointerException。这是自动装箱系统的常见缺陷之一(如果您在循环中装箱/取消装箱数字,则另一个缺陷是性能较差)
发布于 2012-02-07 22:08:15
把包装器类想象成一个holder对象。类似于:
public class Integer {
private int intValue;
//getters and setters
}如果指向整个对象的指针或引用为null,则无法获取执行任何boxing/unboxing操作的值。
当你说:
if (i == 3)unboxing在null引用时自动发生,因此出现异常。
https://stackoverflow.com/questions/9177585
复制相似问题