【发布时间】:2019-01-08 08:59:04
【问题描述】:
我不了解 lambda 的一些内容。
String s = "Hello World";
Function<Integer, String> f = s::substring;
s = null;
System.out.println(f.apply(5));
如果s = null,为什么f.apply 方法仍然有效。毕竟String对象应该被GC删除,因为没有指向该对象的指针。
还有一件事,为什么我这里不需要return 语句?
Function<Integer, String> f = t -> t + "";
【问题讨论】:
-
绝对有一个指向对象的指针。
f成为一个对象,其中包含指向"Hello world"的指针。a::foo评估a并存储对其结果的引用。 -
附带一个问题,
s的初始引用存在于字符串常量池中,因此永远不会被垃圾回收(除非包含类) -
尝试每个问题只问 一个 问题。
-
@LouisWasserman “避免在 cmets 中回答问题”。目前这个问题在 HNQ 上,评论有 3 个赞,这(肯定)会给访问者造成错误的印象。