null和空集合有什么区别?集合List的判断 list == null,list.size() == 0,isEmpty() == true有什么区别和联系?

目录

1. 前言

2. 集合对象的判空  if(list == null){......}

3. 集合长度 size() 方法   if(list.size() == 0){......}

4. 集合判空方法 isEmpty() 方法

5. isEmpty() 和 size() 的联系

6. 开发常见的集合判断逻辑


1. 前言

集合 List 是我们在开发过程中非常常用的,这两天我在做一个功能的时候,用 PostMan 测试接口总是报空指针异常,后来经过调试发现了问题所在,原因就是对于数组的判断方式有误;所以写这篇文章记录下来,防止以后再犯类似的错误,也为了给小伙伴分享让小伙伴们在日后开发过程中也可以避。

2. 集合对象的判空  if(list == null){......}

null 我们通常用来描述一个对象,不管是包装类型,或者是数组列表对象,亦或者是自定义类对象,如果一个集合对象为空,则就不能调用任何一个方法,否则会报空指针异常;

    @Test
    public void testNull(){
        List<Integer> list = null;
        list.add(123);
        System.out.println(list);
    }

 如下,创建一个集合赋值为 null,调用 add 方法就会报 NullPointerException 空指针异常;

3. 集合长度 size() 方法   if(list.size() == 0){......}

size() 方法则是返回集合的长度,也就是集合中元素的个数,如果集合中没有元素则返回0;

方法返回值为 int ;

如下代码测试代码,

    @Test
    public void testSize(){
        List<Integer> list = new ArrayList<>();
        // 不添加数据,判断长度
        int size1 = list.size();
        System.out.println(size1);

        // 添加一个数据,判断长度
        list.add(1);
        int size2 = list.size();
        System.out.println(size2);

        // 新建一个数组赋值为null,判断长度
        List<Long> list2 = null;
        int size3 = list2.size();
        System.out.println(size3);
    }

运行,在控制台得到输出结果;

新建的空集合,size1 = 0;

添加一个元素之后,size2 = 1;

新建一个集合 list2 赋值为null,调用 size() 方法爆出空指针异常;

4. 集合判空方法 isEmpty() 方法

if (list.isEmpty){......}

isEmpty() 方法是Java提供的一个针对集合是否为空的判断方法;

isEmpty()方法是判断集合是否为空,方法返回值为 boolean;

测试代码如下

    @Test
    public void testNull(){
        List<Integer> list = new ArrayList<>();
        // 不添加数据,判断长度
        boolean bol1 = list.isEmpty();
        System.out.println(bol1);
        
        // 添加一个数据,判断长度
        list.add(1);
        boolean bol2 = list.isEmpty();
        System.out.println(bol2);
        
        // 新建一个数组赋值为null,判断长度
        List<Long> list2 = null;
        boolean bol3 = list2.isEmpty();
        System.out.println(bol3);
    }

从上面也可以看出,集合中有元素,方法返回 false;

集合中没有元素,方法返回 true ;

若集合为空,抛出空指针异常;

 

5. isEmpty() 和 size() 的联系

如下,在 List 接口的源码中可以找出此二者。

而我们可以在 ArrayList 类的源码中有新的发现,该类中定义了 size 变量,默认初始化为0

若集合长度为0,说明集合为空;否则,集合必定不为空。

所以从另一个角度来讲,isEmpty() 方法本质上是调用了 size() 方法。

ArrayList 类的 isEmpty 方法的方法体实际上是对集合的长度是否为0做判断。

6. 开发常见的集合判断逻辑

在实际开发的过程中,我们对数组的元素个数做判断通常会采用以下两种方式。

方式一:

 if (list != null && !list.isEmpty()){......}

第一步:首先判断集合是否为 null;

第二步:然后再判断集合是否为空,isEmpty() 方法前面加 "!" 取反值;

所以括号内综合表达意思就是 "如果集合 list 不是 null 并且集合 list 不为空,说明有数据"

满足判断条件,说明集合中含有数据,再去执行括号内部的逻辑,对集合中的数据做处理

方式二:

if (list != null && list.size() > 0){......}

第一步:首先判断集合是否为 null;

第二步:然后再判断集合的长度 size() 是否大于0,大于0就说明有数据;

 所以括号内综合表达意思就是 "如果集合 list 不是 null 并且集合长度大于0,其实也是不为空有数据的意思"

满足判断条件,说明集合中含有数据,再去执行括号内部的逻辑,对集合中的数据做处理

这里再提醒一句,开发过程中调用查询接口,通常会返回批量数据,我们会用集合来接收,在处理数据之前,一定要对集合做 null 判断,否则如果数据库中原本就没有数据,接受结果的对象也就是 null ,如果不做 null 判断会报空指针异常!!!

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值