java 对象的属性在内存里以什么形式存在?

例如引用数据类型String 这个明白的,栈内变量存地址指向堆内的String对象本身,那么如果有一个Student st=new Student() 对象. 然后属性 st.name 那么这个name是String类型在内存里怎么存在?? 下面是我自己的想法
1.堆内st对象的成员name保存的是String对象在堆内存的地址,然后st.name 调用时先找到堆里的对象st 然后通过 st.name 的地址再找到堆里的String对象本身
2.堆内st对象的成员name保存的就是这个String对象本身, 而这个String对象的地址就保存在栈里的st.name中.
3.我以上想法都不对,问各位大神到底是怎么存在的
4.同时问如果有其它自定义类作为对象属性,那么存在形式和String类的存在形式一样不

java对象是引用类型,引用类型的对象的内存分配在堆中。

如果分配在堆中的java对象包含属性,这可以分两种情况分析:
1.属性是基本类型(byte,char,int等)的
则对象的堆内存保存的就是基本类型的值本身。
2.属性是引用类型的(String是引用类型的)
则对象的堆内存中保存的只是这个属性的引用,属性所指向的对象分配在其它堆内存中。

所以,你的理解1是对的,它就是属性是引用类型时的情况。但理解得不完整,还应包括属性是基本类型时的情形。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-19
java中数组是以对象形式存在的,栈中存储的是数组对象的地址(即引用),而对象本身不存放在栈中,而是存放在堆中,使用时通过栈中的引用地址找到堆中的实际对象,这里的引用地址类似于C/C++中的指针。
相似回答