昆明java培训
达内昆明广州春城路

18487146383

热门课程

提防包装类型的null值

  • 时间:2016-09-30
  • 发布:昆明Java培训
  • 来源:达内新闻

昆明Java培训的老师知道Java引入包装类型(Wrapper Types)是为了解决基本类型的实例化问题,以便让一个基本类型也能参与到面向对象的编程世界中。而在Java5中泛型更是对基本类型说了"不",如果把一个整型放入List中,就必须使用Integer包装类型。我们看一段代码:

1 import java.util.ArrayList;

2 import java.util.List;

3

4 public class Client26 {

5

6    public static int testMethod(List<Integer> list) {

7        int count = 0;

8        for (int i : list) {

9            count += i;

10        }

11        return count;

12    }

13

14    public static void main(String[] args) {

15        List<Integer> list = new ArrayList<Integer>();

16        list.add(1);

17        list.add(2);

18        list.add(null);

19        System.out.println(testMethod(list));

20    }

21 }

testMethod接收一个元素是整型的List参数,计算所有元素之和,这在统计和项目中很常见,然后编写一个测试testMethod,在main方法中把1、2和空值都放到List中,然后调用方法计算,现在思考一下会不会报错。应该不会吧,基本类型和包装类型都是可以通过自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)自由转换的,null应该可以转换为0吧,真的是这样吗?运行之后的结果是:Exception in thread "main" java.lang.NullPointerException运行失败,报空指针异常,我们稍稍思考一下很快就知道原因了:在程序for循环中,隐含了一个拆箱过程,在此过程中包装类型转换为了基本类型。我们知道拆箱过程是通过调用包装对象的intValue方法来实现的,由于包装类型为null,访问其intValue方法报空指针异常就在所难免了。问题清楚了,修改也很简单,加入null值检查即可,代码如下:

public static int testMethod(List<Integer> list) {

int count = 0;

for (Integer i : list) {

count += (i != null) ? i : 0;

}

return count;

}

上面以Integer和int为例说明了拆箱问题,其它7个包装对象的拆箱过程也存在着同样的问题。包装对象和拆箱对象可以自由转换,这不假,但是要剔除null值,null值并不能转换为基本类型。对于此问题,我们谨记一点:包装类型参与运算时,要做null值校验。

了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

上一篇:不要让四舍五入亏了一方
下一篇:谨慎包装类型的大小比较

昆明java培训教你实现JSP页面跳转简易方法,120天后月薪过万

昆明Java培训告诉你java和大数据和互联网发展中起什么作用

昆明java培训:初学者学Java Script 5个小技巧

昆明java培训多久可以学会?120天教你成为java开发大神!

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货