java中的Member变量是GC root吗?

时间:2015-03-29 07:49:53

标签: garbage-collection member-variables

我看到很多关于什么是gc root的解释。我知道局部变量和params是gc root.But成员变量不是gc root?如果我在类主体中键入代码

    Person p = new Person("Lily");
    public void sayHello(){
        System.out.println(p.name);
    }

所以,p不是局部变量而是成员变量。如果p不是GC根,它可能是集合。并且在sayHello方法中会有零点异常。

1 个答案:

答案 0 :(得分:0)

人p将是根对象。它将是分层的:

person
  |
name

它也不会以空指针异常结束,因为你初始化了p然后你试图访问它的名字。

如果您将p定义为Person p = null

之类的空值,则只会触发Nullpointer

现在您尝试访问其中的名称System.out.println(p.name);