目录
2. 集合对象的判空 if(list == null){......}
3. 集合长度 size() 方法 if(list.size() == 0){......}
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 判断会报空指针异常!!!