Java对象的成员变量存放在哪

public class A{
    public static void main(String[] args){
        B b = new B();
    }
}

public class B{
    int i;
    C c;
    B(){
        i = 1;
        c = new C();
    }
}

public class C{

}

一般都说 引用在栈上,对象实例在堆上。针对这一段代码,b在栈上,b指向的B实例在堆上。
那请问, 1. i存放在哪?
2.C实例在堆上,那C实例的引用c存放在哪?
3.实例B所在的空间,存储了哪些东西(到底存储的是引用,还是实例)?

莫回无
浏览 2138回答 3
3回答

忽然笑

记住一个原则即可:方法体中的引用变量和基本类型的变量都在栈上,其他都在堆上。 所以B对象里面所有东西都在堆上,main方法中的b变量在栈上。

一只名叫tom的猫

以32位为例,该程序的实例B存放对象头(8字节)+实例数据i(4字节)+C对象的引用c(4字节)=16字节所以i存放在B实例里面,C对象的引用c也放在B对象里面。

翻翻过去那场雪

java的每一个类都有自己的栈,成员变量指针都在栈上,成员变量是类的话,在堆里.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java