Java 集合判空方法对比
问题背景
在抽奖设计需要更新活动关联的用户状态的操作时,由于一个活动奖品可以关联到许多用户,故用户采用列表的形式进行存放:

对活动用户查表并进行防御性编程时,对用户列表进行判空判定发现了一个问题:我选择判空的方法为list.isEmpty(),与标准项目中写的CollectionUtils.isEmpty(lists)(通常指 Hutool、Spring 或 Apache Commons 提供的工具类)写法有区别:一个是使用的封装好的工具类,一个是自带的方法。++这两个有什么本质区别?++
知识收获
经了解,核心区别在于对 null 值的处理机制
-
以
ArrayList为例,其实现非常直接:javapublic boolean isEmpty() { return size == 0; }它仅判断集合内是否包含元素(即
size == 0),如果list为 **null** ,会直接抛出空指针异常(NPE),如果接受的列表中没有进行非空的检验直接调用容易崩溃。 故调用此方法前,必须确保列表引用不为null,否则建议使用CollectionUtils工具类,它对空指针的判定在业务逻辑上进行了归并,不存在抛出空指针异常的风险。 -
以常见的工具类实现为例,其逻辑通常如下:
javapublic static boolean isEmpty(Collection<?> collection) { return collection == null || collection.isEmpty(); }它判断集合是否为
null或者 是否不包含元素(即size),内部集成了null检查,安全性更高。且使用代码更加简洁,减少显式的list != null的判断。
简单总结图
