避免java包装类型空值——自动拆箱浅析
编程技术  /  houtizong 发布于 3年前   110
假设程序中需实现一个公用的方法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。
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接