optional.empty()用于创建不包含值的空optional对象,是静态工厂方法返回的共享不可变单例,适用于表达“无值”语义、查找失败等场景,并支持安全链式操作。

直接调用 Optional.empty() 就能创建一个空的 Optional 对象,它不包含任何值,表示“不存在”或“未找到”的语义。
基本用法:静态工厂方法
Optional.empty() 是 Optional 类提供的静态工厂方法,返回一个共享的、不可变的空实例。无需 new,也不接受参数。
- ✅ 正确写法:
Optional<string> opt = Optional.empty();</string> - ❌ 错误写法:
new Optional()(构造器私有,无法直接实例化) - ❌ 不推荐:
Optional.of(null)(会抛NullPointerException)
适用场景:明确表达“无值”意图
当方法逻辑上可能没有结果时,用 Optional.empty() 比返回 null 更安全、更语义清晰。
- 查找失败:比如从 Map 中查不到 key,可返回
Optional.empty() - 条件未满足:如用户未登录,返回空的
Optional<user></user> - 避免 null 返回:替代传统 “返回 null 表示未找到” 的写法
配合其他 Optional 方法使用
空的 Optional 可以自然融入链式操作,不会中断流程。
-
opt.orElse("default")→ 返回默认值 -
opt.orElseGet(() -> computeDefault())→ 延迟计算默认值 -
opt.ifPresent(System.out::println)→ 什么也不执行(安全跳过) -
opt.map(String::length).orElse(-1)→ 链式调用中自动短路
注意:empty() 返回的是单例对象
JVM 中所有 Optional.empty() 调用都返回同一个对象引用(内部是 static final 实例),因此适合频繁使用,无性能负担。
- 可以放心用于高并发场景
- 不要用
==判断是否为空 —— 应该用opt.isPresent()或opt.isEmpty()(Java 11+)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











