【发布时间】:2019-08-05 04:01:19
【问题描述】:
我有一个类(A),其构造函数定义如下所示。在构造函数中,我通过将侦听器(接口)实现传递给 B 为 B 创建了一个对象,如下所示。
public class A {
private String str;
public A() {
new B(new OnStringUpdatedListener() {
public void onStringUpdated(String str) {
A.this.str = str;
}
});
}
}
在上面的代码中,B 的对象没有分配给 A 的任何字段或构造函数中的变量。
B 的对象的生命周期是多少? 它是在构造函数执行完成后立即标记为垃圾回收,还是因为它注册了一个修改 A 字段的侦听器而仍然存在。
【问题讨论】:
-
这取决于
B的实际外观,但假设没有任何东西可以阻止它被垃圾收集的机会很高,它将在下次垃圾收集器运行时被标记并驱逐。我说“机会”是因为不能保证垃圾收集器会做什么或何时运行 - 出于性能或其他原因,它可能忽略该对象(尽管这不太可能)。
标签: java object constructor object-lifetime