java 对象的属性在内存里以什么形式存在?
例如引用数据类型String这个明白的,栈内变量存地址指向堆内的String对象本身,那么如果有一个Studentst=newStudent()对象.然后属性st.nam...
例如引用数据类型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类的存在形式一样不 展开
1.堆内st对象的成员name保存的是String对象在堆内存的地址,然后st.name 调用时先找到堆里的对象st 然后通过 st.name 的地址再找到堆里的String对象本身
2.堆内st对象的成员name保存的就是这个String对象本身, 而这个String对象的地址就保存在栈里的st.name中.
3.我以上想法都不对,问各位大神到底是怎么存在的
4.同时问如果有其它自定义类作为对象属性,那么存在形式和String类的存在形式一样不 展开
2个回答
展开全部
java对象是引用类型,引用类型的对象的内存分配在堆中。
如果分配在堆中的java对象包含属性,这可以分两种情况分析:
1.属性是基本类型(byte,char,int等)的
则对象的堆内存保存的就是基本类型的值本身。
2.属性是引用类型的(String是引用类型的)
则对象的堆内存中保存的只是这个属性的引用,属性所指向的对象分配在其它堆内存中。
所以,你的理解1是对的,它就是属性是引用类型时的情况。但理解得不完整,还应包括属性是基本类型时的情形。
如果分配在堆中的java对象包含属性,这可以分两种情况分析:
1.属性是基本类型(byte,char,int等)的
则对象的堆内存保存的就是基本类型的值本身。
2.属性是引用类型的(String是引用类型的)
则对象的堆内存中保存的只是这个属性的引用,属性所指向的对象分配在其它堆内存中。
所以,你的理解1是对的,它就是属性是引用类型时的情况。但理解得不完整,还应包括属性是基本类型时的情形。
2020-01-19 · 百度认证:云南新华电脑职业培训学校官方账号
云南新华电脑学校
云南新华电脑学校是经云南省教育厅批准成立的省(部)级重点计算机专业学校,采用三元化管理模式,教学设备先进,师资雄厚学生毕业即就业,学院引进了电商企业入驻,创建心为电商创业园区,实现在校即创业
向TA提问
关注
展开全部
java中数组是以对象形式存在的,栈中存储的是数组对象的地址(即引用),而对象本身不存放在栈中,而是存放在堆中,使用时通过栈中的引用地址找到堆中的实际对象,这里的引用地址类似于C/C++中的指针。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询