在开发过程中,凡是获取到一个集合对象,在利用或者说遍历这个集合对象之前,都要进行是否为null以及size()>0的判断,但是如果size()>0的话,不是就已经可以说明此集合对象不为null吗?为什么多此一举判断集合对象是否为null呢?
原来,如果集合对象为null的话直接调用size()方法会报空指针异常,这显然是不想看到的,所以在调用size()方法之前,要先判断集合对象是否为null,推荐使用commons-collections-XXX.jar包中的CollectionUtils工具类中的静态方法,如:
if (!CollectionUtils.isEmpty(resultList)) {
}
同理,如果一个集合为null,则调用length获取长度时会报空指针异常,根据索引获取元素时也会报空指针异常。
@Test
public void testListAndArray() {
List<String> list = new ArrayList<String>();
System.out.println(list);
System.out.println(list.size());
String[] strArr = new String[0];
System.out.println(strArr.length);
for (String str : strArr) {
System.out.println(str);
}
System.out.println("over");
}
分析得知:
1.System.out.println(new ArrayList())的结果不是null,而是一对中括号,里面不包含任何元素,size为0,遍历什么也得不到;
2.System.out.println(new String[0])的结果也不是null,而是数组对象,但是数组不包含任何元素,数组的长度为0,遍历什么也得不到。
原址
public void testIsEmpty(){
class Person{}
class Girl extends Person{}
List<Integer> first = new ArrayList<>();
List<Integer> second = null;
List<Person> boy = new ArrayList<>();
//每个男孩心里都装着一个女孩
boy.add(new Girl());
//判断集合是否为空
System.out.println(CollectionUtils.isEmpty(first)); //true
System.out.println(CollectionUtils.isEmpty(second)); //true
System.out.println(CollectionUtils.isEmpty(boy)); //false
//判断集合是否不为空
System.out.println(CollectionUtils.isNotEmpty(first)); //false
System.out.println(CollectionUtils.isNotEmpty(second)); //false
System.out.println(CollectionUtils.isNotEmpty(boy)); //true
}