Java中List判空问题白话详解
文章目录
- Java中List判空问题
- 前言
- 对"空"的理解
- 结合程序
- 运行结果
- 总结
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不存在");//2try {if(list1.isEmpty()) System.out.println("杯子1里面没有水");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//3 if(list1==null||list1.isEmpty()) {System.out.println("杯子1不存在或杯子1没有水");}//4try {if(list1.isEmpty()||list1==null) {System.out.println("杯子1没有水或杯子1不存在");}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//5if(list1!=null&&!list1.isEmpty()) {System.out.println("杯子1存在同时杯子1有水");}}private static void daoshui2() {//1 if(list2==null)System.out.println("杯子2不存在");//2if(list2.isEmpty()) System.out.println("杯子2里面没有水");//3 if(list2==null||list2.isEmpty()) {System.out.println("杯子2不存在或杯子2没有水");}//4if(list2.isEmpty()||list2==null)System.out.println("杯子2没有水或杯子2不存在");//5if(list2!=null&&!list2.isEmpty()) {System.out.println("杯子2存在同时杯子2有水");}}public static void main(String[] args) {// TODO Auto-generated method stubdaoshui1();daoshui2();}}
运行结果
可以看到对杯子1判断是否有水的操作都报错了,可以理解为,杯子都不存在怎么判断,系统都找不到你说的杯子1,就报个错给你看看。
接着向后看,if(list1==null||list1.isEmpty())
没有报错,是因为||
或从左到右,当判断为null
之后,就判定为true
了,也就不判断是不是没有水了。第4个if判断中换了个顺序就报错了也是这个道理,先对一个不存在的实物判断有没有就会报错。5不报错也是这道理,当判断不为null
的时候就已经判定为false
了。
杯子2之所以能够完成所有的判断,是因为杯子2是真实存在的(分配了内存),只是里面没有东西。
总结
综上,对于一个集合或容器判空的时候,首先要进行null
的判断,再进行空的判断。也就是看东西是不是真的存在之后再判断里面有没有东西。
Java中List判空问题白话详解相关推荐
- java中集合判空_Java中的类型安全的空集合
java中集合判空 我以前曾在Java Collections类的实用程序上进行过博客撰写,并且特别地在使用Usings Collections Methods上的博客emptyList(),empt ...
- java throw与throws_基于Java中throw和throws的区别(详解)
系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...
- java里的进制转换函数_基于Java中进制的转换函数详解
十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...
- throws java_基于Java中throw和throws的区别(详解)
系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...
- java线程和内核线程的,Java中内核线程理论及实例详解
1.概念 内核线程是直接由操作系统内核控制的,内核通过调度器来完成内核线程的调度并负责将其映射到处理器上执行.内核态下的线程执行速度理论上是最高的,但是用户不会直接操作内核线程,而是通过内核线程的接口 ...
- java中List的用法和实例详解
Java中List的用法和实例详解 List的用法 List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提 ...
- java中switchcase用法,java中的switch case语句使用详解
java中的switch case语句 switch-case语句格式如下: ? swtich()变量类型只能是int.short.char.byte和enum类型(JDK 1.7 之后,类型也可以是 ...
- java中带符号十六进制转换成十进制详解
java中带符号十六进制转换成十进制详解 代码如下 代码如下 必须拿ffff进行测试,否则测不出异同 public void test1(){String strHex="ffff" ...
- java里throws详细讲解,基于Java中throw和throws的区别(详解)
系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...
最新文章
- 刚刚,CVPR 2021论文接收结果「开奖了」
- android杀死进程
- BS程序代码与安全与基本攻击/防御模式
- Django-路由控制
- gRPC in ASP.NET Core 3.0 -- Protocol Buffer(1)
- linux c语言获取时间
- LeetCode 725. 分隔链表
- java 异常练习题_Java 异常(习题)
- Eclipse开发Android常用快捷键
- cnforyou被收购了,没地方买书了
- 西安Uber优步司机奖励政策(12月14日到12月20日)
- 如何在network monitor中查找试图建立TCP连接的帧?
- 数字孪生智慧城市建设解决方案
- CFD-Post批处理(在一系列算例同一位置截取速度云图)
- 你评论,我赠书~【TFS-CLUB社区 第11期赠书活动】〖Unity手机游戏开发:从搭建到发布上线全流程实战〗等你来拿,参与评论,即可有机获得
- 设计必备的配色工具03
- 怎么做国外问卷调查站点查
- 2016搜狗校招编程题
- Python版 孤勇者 | 画图+演奏+音乐可视化
- pyqt5显示日期与时间