Java中List判空问题
记录下关于java编程过程中,对于获取数据放入list集合之后的判断,往往出现空指针这种坑。
前言
在实际的编程过程中,需要通过数据库查询等方式获取数据,但是此时需要根据获取到的数据量进行判断,决定后续的业务处理逻辑,数据往往添加到List集合中,因此涉及到对List集合的判空方式。
对"空"的理解
Java对于“空”的理解和常识不太相同,可以理解为编程中需要判断不存在和内容没有的区别,也就是null
和""
的区别。
通俗的来讲:就是去判断两个空间是否存在的区别。好比现在告诉你有两个杯子:杯子A和杯子B,其中杯子A压根就不存在,null
就相当于这种情况;而杯子B存在但里面是空的没有任何东西,这就相当于""
。
结合程序
实例化两个杯子,杯子1(list1)和杯子2(list2),然后分别执行倒水的操作。
先倒杯子1的水,判断是否为空,写了5个if,分别表示
1、杯子1不存在
2、杯子1里面没有水
3、杯子1不存在或杯子1没有水

4、杯子1没有水或杯子1不存在
5、杯子1存在同时杯子1有水
接着倒杯子2的水,也是判断是否为空。
其中:list.isEmpty()
方法等价于list.size()==0
package action;
import java.util.ArrayList;
public class TestList {
private static ArrayList<?> list1 = null;
private static ArrayList<?> list2 = new ArrayList<String>();
private static void daoshui1() {
//1
if(list1==null)
System.out.println("杯子1不存在");
//2
try {
if(list1.isEmpty())
System.out.println("杯子1里面没有水");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//3
if(list1==null||list1.isEmpty()) {
System.out.println("杯子1不存在或杯子1没有水");
}
//4
try {
if(list1.isEmpty()||list1==null) {
System.out.println("杯子1没有水或杯子1不存在");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//5
if(list1!=null&&!list1.isEmpty()) {
System.out.println("杯子1存在同时杯子1有水");
}
}
private static void daoshui2() {
//1
if(list2==null)
System.out.println("杯子2不存在");
//2
if(list2.isEmpty())
System.out.println("杯子2里面没有水");
//3
if(list2==null||list2.isEmpty()) {
System.out.println("杯子2不存在或杯子2没有水");
}
//4
if(list2.isEmpty()||list2==null)
System.out.println("杯子2没有水或杯子2不存在");
//5
if(list2!=null&&!list2.isEmpty()) {
System.out.println("杯子2存在同时杯子2有水");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
daoshui1();
daoshui2();
}
}
运行结果
可以看到对杯子1判断是否有水的操作都报错了,可以理解为,杯子都不存在怎么判断,系统都找不到你说的杯子1,就报个错给你看看。
接着向后看,if(list1==null||list1.isEmpty())
没有报错,是因为||
或从左到右,当判断为null
之后,就判定为true
了,也就不判断是不是没有水了。第4个if判断中换了个顺序就报错了也是这个道理,先对一个不存在的实物判断有没有就会报错。5不报错也是这道理,当判断不为null
的时候就已经判定为false
了。
杯子2之所以能够完成所有的判断,是因为杯子2是真实存在的(分配了内存),只是里面没有东西。
总结
综上,对于一个集合或容器判空的时候,首先要进行null
的判断,再进行空的判断。也就是看东西是不是真的存在之后再判断里面有没有东西。