Java中Objects类提供静态工具方法简化空值判断、对象比较等操作:nonNull/isNull语义清晰;equals安全比较null;requireNonNull快速失败并支持函数式消息;hash/toString/requireNonNullElse减少样板代码。

Java中Objects类(位于java.util包)提供了一组静态工具方法,能显著简化空值判断、对象比较、哈希计算等常见操作,避免手写冗长且易错的null检查代码。
用Objects.nonNull和Objects.isNull替代if (obj != null)
这两个方法语义更清晰,尤其在Stream或Lambda中可直接作为谓词使用。
-
Objects.nonNull(obj)返回true当且仅当obj != null,比手写判断更直观 -
Objects.isNull(obj)是其反向逻辑,适合强调“必须为空”的校验场景 - 示例:
list.stream().filter(Objects::nonNull).map(String::length).collect(...)
用Objects.equals安全比较两个可能为null的对象
避免a.equals(b)因a为null而抛NullPointerException,也省去手动判空嵌套。
-
Objects.equals(a, b)内部自动处理:若两者都为null返回true;若仅一个为null返回false;否则调用a.equals(b) - 适用于DTO比较、Map键值匹配、单元测试断言等场景
- 注意:它不替代重写
equals(),而是帮你安全调用已有的equals逻辑
用Objects.requireNonNull带提示信息快速失败
替代if (obj == null) throw new NullPointerException(...),简洁且自带异常消息。
立即学习“Java免费学习笔记(深入)”;
-
Objects.requireNonNull(obj, "user must not be null")——参数为null时抛出含定制消息的NullPointerException - 支持函数式消息:如
Objects.requireNonNull(obj, () -> "ID " + id + " not found"),延迟计算,提升性能 - 常用于构造器、setter、公共API入口,实现“fail-fast”契约
其他实用方法:hash、toString、requireNonNullElse
进一步减少样板代码,提升可读性与健壮性。
-
Objects.hash(a, b, c):一键生成多字段组合哈希值,替代手写31 * (31 * a.hashCode() + b.hashCode()) + c.hashCode() -
Objects.toString(obj, "default"):安全调用toString(),obj为null时返回默认字符串,避免NPE -
Objects.requireNonNullElse(obj, defaultValue):类似三元操作obj != null ? obj : defaultValue,但更语义化,且支持泛型推导
基本上就这些。合理使用Objects工具方法,能让代码更简短、意图更明确、边界更安全——不复杂但容易忽略。










