避免java包装类型空值——自动拆箱浅析

编程技术  /  houtizong 发布于 2年前   88

    假设程序中需实现一个公用的方法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];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客