list 非空判断

一、简述

1️⃣方法一(数据量大,效率低):

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

2️⃣方法二(数据量大,效率高)【最佳】:

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

方法说明:
list != null:判断是否存在 list,null 表示这个 list 不指向任何东西,如果这时候调用它的方法,那么就会出现 NPE(NullPointerException空指针异常)。
list.isEmpty():判断 list 里是否有元素存在。
list.size():判断 list 里有几个元素

二、list != null 和 list.size()>0 的区别

1️⃣list==null意味着 list 压根没有地址,在内就不存在。
2️⃣list.size()==0意思堆内有 list 但是没有元素,暂时为零。
3️⃣list 如果为 null 的话,说明没有进行初始化。这时 list 调用任何方法都会抛出空指针异常。list.size()==0说明 list 已经被 new 过,但是里面没有值。
4️⃣区别:
①瓶子存在list != null
②瓶子里没有水list.isEmpty()
判断的时候一定要注意先后顺序。如果连瓶子都没有,直接判断有没有水,是会报java.lang.NullPointerException的。
③另外:list.add(null)会造成list.isEmpty()为 false,list.size() 为 1。所以代码里要避免list.add(null)的陷阱。
④理解:
举个例子,我有一个空着的水杯(list),而你没有,那你是 null,我的 size 为 0。你如果想装水就需要买个水杯(new ArrayList()),而我却可以直接装水(list.add(水))。你要是没有杯子直接倒水,水就会流出(空指针异常)。所以用做判断的时候经常连用list!=null && list.size()!=0

三、双重判断原理

List list=new ArrayList();
1️⃣如果是以上这样的话,list 不为 null 但是 size=0,这样集合对于之后的判断是没有意义的,甚至是报异常,如 list.get(0…n) 这样取值判断,就会报异常。
2️⃣如果先判断 size 再判断 null,如:
if(list.size>0 && list != null){};
这种情况如果 list 等于 null 时那么 list.size 会报 NPE。所以要双重判断最好这样写if(list != null && list.size>0){}

至于性能,查看 ArrayList 源码,isEmpty 先获取 size 的值判断再返回,list.size() 则是直接返回属性 size 的值。数据量小时,list.size 较快。(有疑义)

public int size() {
    return size;
}
public boolean isEmpty() {
    return size == 0;
}

Java 中的判空操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值