2015-11-15 65 views
0

我有關於下面的一段代碼的問題。Java:創建了多少個對象?數組作爲成員變量

class MemArr{ 
    int[] mem = {1,2}; 
} 

public class Test{ 
    public static void main(String[] args){ 
    MemArr[] x = new MemArr[2]; //line 1 
    x[0] = new MemArr();   //line 2 
    x[1] = null;     //line 3 
           //line 4 
    } 
} 

總共創建了多少個對象,並且在達到第1行時有多少對象符合垃圾回收的條件?

我認爲,位於第1行,有創建的5個對象(1數組x,在陣列x的MemArr 2個目的,整數數組的用於MemArr的物品2的成員變量)

在第2行,創建了兩個對象(一個是MemArr對象及其成員變量mem)。

在第3行當x[1]設置爲空時,我認爲總共有4個對象符合GC要求,但我對此不太確定。

回答

2
MemArr[] x = new MemArr[2]; 

此創建新MemArr陣列2個的元素,但它不初始化任何2個元件。聲明之後,x[0]x[1]都是null:該數組已被實例化,但沒有其內容。

x[0] = new MemArr(); 

這確實將新的MemArr分配給數組的第一個元素。因此它創建一個MemArr,併爲其包含的內部int[] mem創建另一個陣列。

x[1] = null; 

此行不做任何事;如前所述,該值已經是null

1

第一行創建2個元素的單個數組對象。這兩個元素默認爲空,因此不會創建MemArr對象。

第二行創建一個MemArr對象和該對象內的一個內部數組對象。

第三行不創建任何對象。事實上,它沒有區別,因爲x[1]已經是空的。

+0

啊好吧,我看到我的錯誤。謝謝! – Philipp