看例子就明白了
```
-
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