orElse是Optional中用于空值时返回默认值的方法,其参数立即求值,无论Optional是否含值都会执行;而orElseGet接受Supplier,仅在为空时惰性调用,适合高开销场景。

Java 中 orElse 是 Optional 类提供的一个方法,专门用于在 Optional 为空(即 isPresent() == false)时返回指定的默认值。
orElse 的基本用法
它接收一个参数,类型必须和 Optional 封装的泛型类型一致。只要 Optional 不为 null 且包含值,就返回该值;否则返回你传入的默认值。
-
Optional<string> opt = Optional.empty();</string>String result = opt.orElse("default"); // result = "default" -
Optional<integer> opt = Optional.of(42);</integer>Integer result = opt.orElse(-1); // result = 42
注意 orElse 和 orElseGet 的区别
orElse 的参数是**立即求值**的,不管 Optional 是否为空,都会先执行传入的对象或表达式。如果默认值生成开销大(比如新建对象、调用方法),推荐用 orElseGet(Supplier),它只在需要时才调用 Supplier。
opt.orElse(new HeavyObject()); // HeavyObject 总是被创建opt.orElseGet(() -> new HeavyObject()); // 只在 opt 为空时创建
常见误用:不要对 null 值直接调用 orElse
Optional 本身不能为 null,但如果你用 Optional.of(null) 会抛出 NullPointerException。正确做法是用 Optional.ofNullable(...) 包装可能为 null 的值:
立即学习“Java免费学习笔记(深入)”;
-
String str = null;Optional<string> opt = Optional.ofNullable(str); // 安全</string>String result = opt.orElse("fallback"); // 返回 "fallback" - ❌ 错误写法:
Optional.of(null).orElse("x")→ 直接报错
结合链式调用的实际例子
常用于安全取值场景,比如从 map 或嵌套对象中获取字段:
-
Map<string string> config = new HashMap();</string>String host = Optional.ofNullable(config.get("host")).orElse("localhost"); -
User user = getUserById(123);String name = Optional.ofNullable(user).map(User::getName).orElse("anonymous");


















