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'將是相同的。 –