Java中的垃圾收集器在null之后

Lui*_*Sep 1 java garbage-collection

我正在从一本java认证书中做一些练习.在有关垃圾收集的问题中,它们提供以下代码:

class Test {
   private Demo d;
   void start() {
      d = new Demo();
      this.takeDemo(d);
   }
   void takeDemo(Demo demo) {
      demo = null;
      demo = new Demo();
   }
}
Run Code Online (Sandbox Code Playgroud)

问题是

何时是在第4行创建的Demo对象,是否有资格进行垃圾回收?

我会说它可以在指令demo = null之后收集; 因为不再引用它,但他们给出的答案是:

当运行此代码的实例符合垃圾回收条件时

我错过了什么?

ass*_*ias 5

Java是"按值传递",因此该语句demo = null;仅影响demoin 的本地副本takeDemo.它不设置dnull,这是因此,只要外围实例是可到达的到达.

  • @Dukeling事实并非如此. (4认同)
  • 对我来说,就C/C++而言,Java实现了纯粹的值传递. (2认同)