2016-12-03 56 views
0

今天,我在考試的以下問題:對象的數量創造了

String[] subjects=new String[10]; 
String subname="POPL-201617"; 
subjects[0]=subName; 
subName=null; 
  1. 創建了多少東西?

    我的回答:將創建11個對象。 10從第一個語句,一個是字符串文字。

  2. 代碼執行後對這些對象存在多少個引用?

    我的回答:總共提到了一個「POPL-201617」。

  3. 說明這些對象是否符合垃圾回收的條件。

    我的回答:既然有一個對「POPL-201617」的引用,它就沒有資格進行垃圾回收。即使沒有參考,它也是一個interned字符串,因此不能被垃圾收集。其餘的都有資格進行垃圾回收。

我關注的第一個語句。我們沒有將任何參數傳遞給String類的構造函數。它會形成對象還是隻是空間分配在堆上?

此外,我的理解說,主題最初指向陣列的基礎。所以,第一個元素最初有一個參考。但是因爲subject [0]現在引用了POPL,所以no數組元素沒有任何引用。

我正確嗎?或者我錯過了什麼?

+4

您在第一條語句中沒有創建任何*字符串對象。你只是在創建一個數組(一個對象)。數組中的每個元素都將是空引用。 –

+0

地獄。我怎麼錯過了?有6分。 –

+0

在某些情況下,可以垃圾收集Interned字符串。 – assylias

回答

1

您錯過的唯一的事情是String[] subjects=new String[10]只創建了一個String[]類型的對象。