objects.requirenonnullelse是java 9引入的安全替换null值方法,接收待检对象和默认值,仅当前者为null时返回后者;若默认值为null则抛npe,且不支持延迟计算。

Objects.requireNonNullElse 是 Java 9 引入的工具方法,用于在变量为 null 时提供一个默认值,同时避免对非 null 值做无谓的判空或赋值操作。
核心作用:安全替换 null 值
它接收两个参数:第一个是待检查的对象引用,第二个是当其为 null 时返回的默认值。关键点在于——只在第一个参数为 null 时才使用第二个参数;否则直接返回第一个参数本身,不调用任何构造或计算逻辑,因此比三元运算符更简洁、比 Optional.orElse 更轻量。
和三元表达式对比更清晰
传统写法:
String name = inputName != null ? inputName : "unknown";
用 requireNonNullElse 替代:
String name = Objects.requireNonNullElse(inputName, "unknown");
两者语义一致,但后者更明确表达“我允许 null,并希望补一个默认值”,可读性略高,且避免手误写成 == null 或漏掉括号。
注意:不适用于需要延迟计算默认值的场景
如果默认值生成开销大(比如新建对象、IO 或复杂计算),requireNonNullElse 不会惰性求值——第二个参数总会被提前计算。此时应改用:
Optional.ofNullable(obj).orElseGet(() -> expensiveDefault())- 或手动 if 判空 + 延迟初始化
常见误用提醒
不要和 requireNonNull 混淆:
- requireNonNull(obj) 是抛异常,用于强制非空校验;
- requireNonNullElse(obj, def) 是兜底,默认值必须是非 null(否则仍抛 NullPointerException)。
例如下面代码会抛异常:
Objects.requireNonNullElse(str, null); // 第二个参数为 null → 抛 NPE











