课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 提防包装类型的null值
  • 提防包装类型的null值

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

  • 昆明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--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56