对象是在堆里没错,但是我说的意思是还有一个引用变量,就是object它存放在什么位置?

解决方案 »

  1.   

    对象放在堆区,就是说这个对象的所有非静态成员都在堆区,怎么不明白?
    不然对象你以为是一堆没用的数据构成的?比如
    class Test {
    Object o = new Object();
    }那么你new一个Test对象,这个对象的几乎所有信息都在堆区的,包括他的成员o这个引用,而o指向的对象可能在堆区的其他地方。
      

  2.   

    Object object  = new Object();如果这个object是个成员变量(LZ说的实例变量),那他应该作为他的拥有者的一部分保存在堆里的假设
    class A{
    Object object  = new Object();
    }那A的实例 new A() 实际上是存在堆里的, 这个实例里有个Object引用, object实例也存在堆里。
      

  3.   

    “但是如果这句代码作为实例变量,放在类中作为实例域时被这个类的所有实例所共享”
    这句话有些矛盾的,我先更正一下。如果称为实例变量,意思就是对象的成员,比如对象a的属性p。实例变量是不能为类的所有实例共享的,只在当前实例(对象)有效。如果要被类的所有实例共享,就称为类变量。
    解释你的问题:
    假如object是实例变量,那么会放在堆里;
    假如object是类变量,那么类放在哪里,这个变量就放哪里——类放在方法区,不是堆也不是栈;
    局部变量放堆里。