Java 引用类型数组内存模型,下面哪一种是正确的?对象数组的每个元素都会在栈内存中有一个引用吗?
看了两个老师的教程,画内存图的时候有点不一样
相关代码
Person[] per = new Person[]{
new Person("A", 1),
new Person("B", 2),
new Person("C", 3)
};
版本1:
版本2:
Person[] per = new Person[]{
new Person("A", 1),
new Person("B", 2),
new Person("C", 3)
};
版本1:
版本2:
图一是正确的,栈里面不存在per[0],pr[1],per[2]这些引用,看一下
Person[] per = new Person[]{
new Person("A", 1),
new Person("B", 2),
new Person("C", 3)
};
这段代码在局部变量表只占per一个槽数,locals=1,
可以使用javap -v看一下
这和是不是JAVA已经没有关系了吧。。
这其实是指针的概念,栈里只会保存数组的头地址,per[1],per[2]其实是地址+1 +2,并没有具体的per[1],per[2]变量
4 回答1.4k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答741 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
1是对的,2是错的。java对象在堆中分配,数组是对象,所以分配在堆中