对象放在堆区,就是说这个对象的所有非静态成员都在堆区,怎么不明白? 不然对象你以为是一堆没用的数据构成的?比如 class Test { Object o = new Object(); }那么你new一个Test对象,这个对象的几乎所有信息都在堆区的,包括他的成员o这个引用,而o指向的对象可能在堆区的其他地方。
Object object = new Object();如果这个object是个成员变量(LZ说的实例变量),那他应该作为他的拥有者的一部分保存在堆里的假设 class A{ Object object = new Object(); }那A的实例 new A() 实际上是存在堆里的, 这个实例里有个Object引用, object实例也存在堆里。
不然对象你以为是一堆没用的数据构成的?比如
class Test {
Object o = new Object();
}那么你new一个Test对象,这个对象的几乎所有信息都在堆区的,包括他的成员o这个引用,而o指向的对象可能在堆区的其他地方。
class A{
Object object = new Object();
}那A的实例 new A() 实际上是存在堆里的, 这个实例里有个Object引用, object实例也存在堆里。
这句话有些矛盾的,我先更正一下。如果称为实例变量,意思就是对象的成员,比如对象a的属性p。实例变量是不能为类的所有实例共享的,只在当前实例(对象)有效。如果要被类的所有实例共享,就称为类变量。
解释你的问题:
假如object是实例变量,那么会放在堆里;
假如object是类变量,那么类放在哪里,这个变量就放哪里——类放在方法区,不是堆也不是栈;
局部变量放堆里。