有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果我向外部集合添加一个整型字段,那么我是否发布了一个?

考虑如下:

public static Set<B> set;

class A {
  private B b = new B();
  void someMethod();
}

class B {
 public void f() { A.this.someMethod(); }
}

那我要做什么

A a  = new A();
set.add(b);

现在我相信在b从集合中移除之前,不会对a进行垃圾收集,因为我们可能仍然想要调用b.f(),而这将需要A.this

现在用Integer替换B,这样我们就有了

public static Set<B> set;

class A {
   private Integer b = new Integer(6000);
}

再一次

A a  = new A();
set.add(b);

现在,在相同的场景中,A也永远不会被垃圾收集,直到Integer b从集合中移除吗


共 (1) 个答案

  1. # 1 楼答案

    set.add(a.n);
    

    您正在复制对n引用的整数(可能是)的引用。对a引用的对象没有隐式或显式的反向引用

    如果a引用的对象符合GC的条件,则在GC运行时将运行其finalize方法