【发布时间】:2017-02-08 12:19:39
【问题描述】:
s.get()第二次也返回“ONE”是什么解释?
String x = "one";
Supplier<String> s = x::toUpperCase;
System.out.println("s.get() = " + s.get());
x = "two";
System.out.println("s.get() = " + s.get());
更新:
比较一下:
String x = "one";
Supplier<String> s = () -> x.toUpperCase();
System.out.println("s.get() = " + s.get());
x = "two";
System.out.println("s.get() = " + s.get());
会抛出编译错误。
【问题讨论】:
-
赞成。这比“因为它是一个参考,init”是一个合适的答案的更简单的情况更有趣。
-
@khelwood:类似我会说。您可以在 C++ 中编写类似于
Supplier的内容,会输出“TWO”。 -
第二个例子不应该编译
标签: java lambda java-8 method-reference expression-evaluation