前景提要
jvm实例变量存放位置问题
0 悬赏园豆: 80 [待解决问题] 假设有如下代码:
1、实体类Animal:
class Animal{
private Integer eye;
private Integer leg;
private String name; // 以下省略代码 get 和 set 方法...
}
2、main方法中使用:
Animal animal = new Animal();
animal.setEye(2);
animal.setLeg(2);
animal.setName("tom");
问题:关于实例变量eye、leg、name在jvm中,变量和对应的值存放位置应该是怎样的呢?附上一张图,是我的理解,欢迎各位老师和同学帮忙解答和指正。
eye和leg是实例变量,所以和实例一起放在堆中(变量和对应的值都在堆中)。
而name是String,由于在String类内部加了final,所以它实际是常量,所以name实例变量放在堆中,而name对应的值“tom”放在常量池中。
jvm实例变量 实例变量存放位置 java12345_com | 初学一级 | 园豆: 124
提问于:2020-06-24 17:37 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(2) 0 如果你用的是Integer的话,它们还是对象,单独在堆里开辟空间的 yytxdy | 园豆:1093 (小虾三级) | 2020-06-24 17:41 如果是int(基本数据类型)呢,就会直接放在堆中是吧?其它的,我理解得怎么样,是正确的吗? 支持( 0 ) 反对( 0 ) java12345_com | 园豆:124 (初学一级) | 2020-06-24 17:43 @java12345_com: int的话,差不多,不过eye和leg也不是共享一个值,还有堆里只有值,没有变量的说法 支持( 0 ) 反对( 0 ) yytxdy | 园豆:1093 (小虾三级) | 2020-06-24 17:55 @yytxdy: 如果堆里面没有变量,那么实例的属性(变量)放在哪的呢?“int的话,差不多,不过eye和leg也不是共享一个值”那么它们的值应该是怎么存放的呢? 支持( 0 ) 反对( 0 ) java12345_com | 园豆:124 (初学一级) | 2020-06-29 14:51 @java12345_com: 属性在class文件里啊,eye和leg各自有各自的内存空间呗 支持( 0 ) 反对( 0 ) yytxdy | 园豆:1093 (小虾三级) | 2020-06-30 09:06 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 原始数据类型变量:
原始数据类型变量的“变量分配”与“数据分配”是在一起的(都在方法区或栈内存或堆内存),除非加了final修饰(放在常量池)。
引用数据类型变量:
引用数据类型变量的“变量分配”与“数据分配”不一定是在一起的。
对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。 java12345_com | 园豆:124 (初学一级) | 2020-06-30 10:32 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。