假设程序中需实现一个公用的方法f,用来统计一个整数list中所有值的和,思路很简单,如下:
public static int f(List<Integer> list){
int count = 0;
for(int i:list){
count += I;
}
return count;
}
方法写好后,我们在main方法中调用之,如下:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(null);
System.out.println(f(list));
我们知道,jdk1.5之后的版本提供了自动装/拆箱功能。上述程序中,list添加了一个值null的元素,那么拆箱后,该值应该会自动变成0吧?
执行上述程序后会发现,不是这样的。
程序会报出空指针异常,这是为什么呢?
其实,如果了解jdk1.5以前的版本中包装类型拆箱的实现方法,答案不难得出,jdk1.5以前的版本,拆箱是这样做的:
int i=j.intValue();//手动拆箱操作
java提供了自动拆箱功能后,例如Integer a = 2这样的操作,在底层依然是调用 intValue()方法,所以在上述报错代码中,null值调用intValue()方法,自然会报出空指针异常。
所以一个简单的求和方法,如果涉及到包装类与基本类型之间的转换,也要做足判断,避免不必要的bug。
本文探讨了Java中自动拆箱遇到null值时引发空指针异常的问题,并通过示例代码详细解释了其背后的原因。文章强调了在处理涉及包装类与基本类型转换的求和方法时,进行必要判断的重要性。

被折叠的 条评论
为什么被折叠?



