2016-04-25 108 views
-1

如果有人可以解釋這兩種類型的數組初始化的,將是巨大的區別:Java列表/數組列表澄清

有一個在ListReturn類的靜態方法getList(),這在調用返回ArrayList<Some_Custom_Object>

在調用類的,我可以調用函數有兩種方式如下:這裏

  1. List<Some_Custom_Object> listFromCall = new ArrayList<Some_Custom_Object>(); listFromCall=ListReturn.getList();//works completely fine

  2. List<Some_Custom_Object> listFromCall = ListReturn.getList();//Works completely fine

我的問題是,在第二種情況,我們是否需要直接初始化或實例化listFromCall對象?將方法的返回值分配給未初始化的List/ArrayList對象?

有人能解釋一下引擎蓋下面發生了什麼嗎?

感謝

+0

'ListReturn'?這是任何標準課程嗎?如果不是,那麼它將取決於阻礙。 – SacJn

+1

數字1看起來像是一個不知道自己在做什麼的人寫的。將一個新的'ArrayList'分配給一個變量是毫無意義的,您將立即設置其他變量。 – khelwood

回答

1

讓我們來討論這兩種方式逐一

第一種方式:

  1. List<Some_Custom_Object> listFromCall = new ArrayList<Some_Custom_Object>();

手段,同樣的東西,

enter image description here

listFromCall=ListReturn.getList();//works completely fine 

它將反映在listFromCall的價值分配,見下面的圖片爲 更深的瞭解,

enter image description here

這裏,完成這兩個聲明的,總要麼2 -object created(1 將有資格在第二次創建和分配後進行垃圾回收) 或1對象創建(這將符合垃圾收集 並分配null以參考變量)

你的第二個方式:

現在,如果你做的東西同樣,

2. List<Some_Custom_Object> listFromCall = ListReturn.getList();//Works completely fine 

然後,它會出現一些同樣,

enter image description here

因此,這裏的1-object(of ArrayList)將在堆上創建或不。

+0

非常感謝您的詳細解釋,我非常感謝您花時間解釋這一點。我只有一個查詢。第二個方法圖,不應該是null值和ListReturn.getList();的返回值之間的OR。方法。 – RookieHere

+0

@RookieHere進入第二種方法可能不會創建實例,在這種情況下將分配null否則實例 –

+0

非常感謝您回答Mr.Vishal – RookieHere

2

您只需如果從它,你寫它之前閱讀初始化變量。

如果您寫入未初始化的變量,計算機不關心,因爲您正在使用從ListReturn.getList()返回的值進行初始化。

實際上,如果在使用之前要覆蓋它們,您不應該不必要地將對象變量初始化爲除null之外的任何東西。否則,你無意中創建並垃圾收集額外的對象。

+0

非常感謝您的回答,創建和GCing一個額外對象的意義重大。謝謝 – RookieHere