【发布时间】:2017-03-30 09:48:27
【问题描述】:
是
test::testMethod == test::testMethod
真的吗?我想知道它们是否会引用同一个对象。此代码无法编译。但可能有几种情况需要澄清。
我怀疑这将扩展到
Runnable r = () -> test.testMethod()
Runnable r1 = () -> test.testMethod()
以及以下是否属实。
r == r1
【问题讨论】:
-
如果代码不能编译,那么询问结果是否为
true是没有意义的。请提供一个确实编译的完整示例。 -
我怀疑答案是它没有指定 - JLS 15.13.3:“接下来,分配并初始化具有以下属性的类的新实例,或者类的现有实例引用了以下属性。” (我看不到有关重用实例的情况的详细信息。)
-
见Does a lambda expression create an object on the heap every time it's executed?。简而言之,它是故意未指定的。可能是
true,但不是必须的。而在当前的 JRE 中,情况并非如此。您还可以追溯this answer 的测试,该测试表明,在哪些情况下,当前实现中的对象是相同的。