看例子就明白了
```
-
static String B() {
-
System.
out.println(
"B()...");
-
return
"B";
-
}
-
-
public static void main(final String... args) {
-
System.
out.println(Optional.of(
"A").orElse(B()));
-
System.
out.println(Optional.of(
"A").orElseGet(() -> B()));
-
}
prints
-
B()...
-
A
-
A
```
调用orElse时,将评估apicall()。值并将其传递给方法。 然而,在orElseGet的情况下,仅当oldValue为空时才进行评估。 orElseGet允许延迟评估。也就是说:orElse(T)无论前面Optional容器是null还是non-null,都会执行orElse里的方法,orElseGet(Supplier)并不会
> 当然,在这个例子中,差异可能是不可测量的,但是如果你必须从远程Web服务或数据库中获取默认值,它突然变得非常重要。
原文地址:https://blog.csdn.net/tengxing007/article/details/82684472