Java上的任何对象都生活在堆上。
在Java数组中也是一个对象,因此数组Object也存在于堆中。
阐释: -
当编写
int a=new int[5],
(新INT [5])的一部分创建对象,因此住在堆。
Integer x=new Integer(10000)
也是一个对象(记住新的操作符总是会创建新的对象)。
,因此当你赖特,
Integer [] d2 = new Integer[5];
是Integer对象的数组。
至于ArrayList的被认为这也是一个类,但它包装阵列对象,并增加了动态存储器到它。 因此,
ArrayList d3 = new ArrayList();
再次创建对象,因此生活在堆上。
考虑ArrayList类为:
class ArrayList{
int index=0;
Object[] obj=new Object['some integer value (depends on JVM)'];
public void add(Object o){
obj[index]=o;
index++;
}
//other methods
}
所以,当你写 d3.add(5)实际上d3.add(新的整数(5))被调用。
记住一个黄金法则: 在创建现场直播HEAP及其对堆栈活引用任何Java对象的。
阵列是对象的证明: -
int[] a={4,3,1,2};
System.out.println(a instanceof Object);
//输出真
数组是在端部的'Object'(甚至基元的阵列)。顺便说一下,你接近最终答案。 –
@LuiggiMendoza我改变了我的图。这是否是正确的答案? – blutuu
几乎JVM维护一个'Integer'对象的池,从-128到127.所以对于'd2'数组和'd3' ArrayList,值为3的'Integer'将是相同的。 –