判断查询返回的结果集合null和空
判断查询返回的结果集合null和空¶
同时判断 emps != null && !emps.isEmpty() ,而不仅仅是 emps != null

1. emps 可能为 null¶
- 比如
deptMapper.listByDeptId(id)没查到数据,有的 DAO 实现可能直接返回null。 - 如果不先判断
emps != null就直接.isEmpty(),会 NullPointerException。
2. emps 也可能是一个 空集合¶
- 很多 ORM 框架(MyBatis、JPA)查询“没有结果”时返回的往往是 空集合(empty list) ,而不是
null。 - 这种情况下,
emps != null仍然成立,但实际上部门下并没有员工。 - 所以必须再判断
!emps.isEmpty(),才能确定“部门下确实有员工”。
3. 逻辑上的语义区别¶
emps != null只能说明返回结果不是空指针。!emps.isEmpty()才能说明“集合里确实有数据”。
结合在一起:
👉 表示 只有当集合存在,并且里面确实有员工时,才阻止删除。
✅ 总结:
只判断 null 会导致 空集合([])的情况漏掉;
只判断 isEmpty() 又可能引发 空指针异常;
所以两个条件要一起用,确保逻辑安全又正确。
使用场景¶
!= null && !xxx.isEmpty() 的组合判断,在开发中经常出现。
本质上是为了 既避免空指针,又保证集合/字符串真的有内容。
1️⃣ 集合 (List / Set / Map)¶
- 只判断 != null:可能是空集合
[],但逻辑上是“无数据”。 - 只判断 isEmpty() :可能会 NPE。 ✅ 两个一起用,保证安全且正确。
2️⃣ 字符串 (String)¶
进一步的,很多时候要判断是否是“空白字符串”(包含空格、换行):
或者用工具类(推荐):
- Apache Commons Lang:
StringUtils.isNotBlank(str) - Spring:
StringUtils.hasText(str)
3️⃣ 数组¶
和集合类似,避免 NullPointerException。
4️⃣ 数据库查询结果 / Optional¶
很多时候数据库查询结果可能是:
- null(没查到,手写 Mapper 时常见)
- 空集合(框架默认返回 empty list)
判断逻辑跟你代码里的 emps 一样。
如果用 JDK8 Optional:
5️⃣ 自定义对象的属性¶
这种链式属性判断如果写多了会很丑,Java 8 以后推荐用 Optional 来写,或者用 Spring 的 ObjectUtils.isEmpty()。
✅ 总结通用模式¶
在 Java 里,“是否有数据”一般要同时判断:
- 对象是否存在(
!= null) - 是否有内容(集合
!isEmpty()/ 数组length > 0/ 字符串!isEmpty()或isNotBlank())
这样写才最稳。