【发布时间】:2013-05-10 20:39:03
【问题描述】:
我正在做一些研究,遇到了一个问题,要求显示以下代码的正确内存图:
int [] d1 = new int[5];
d1[0] = 3;
Integer [] d2 = new Integer[5];
d2[0] = new Integer(3);
ArrayList d3 = new ArrayList();
d3.add(3);
这是我对内存图的尝试,但可能不正确:
我知道对象、实例变量和“新”实例等东西都在堆上,而局部变量和原始类型等东西都在堆栈上,但是当涉及到数组类型时,我仍然感到困惑。
感谢任何帮助。
【问题讨论】:
-
一个数组最终是一个
Object(甚至是一个基元数组)。顺便说一句,你已经接近最终答案了。 -
@LuiggiMendoza 我已经改变了我的图表。这是正确的答案吗?
-
几乎,JVM 为从 -128 到 127 的
Integer对象维护了一个池。因此,Integer的值为 3 将与d2数组和d3ArrayList 相同. -
@LuiggiMendoza 那么 d3 ArrayList 的第一个索引是否应该指向 d2[0] 指向的块?
-
@LuiggiMendoza 太棒了。谢谢!
标签: java heap-memory stack-memory