2016-04-25 14 views
-1

誰かが素晴らしいことだアレイの初期化のこれらの二つのタイプの違いを説明できる場合は、次の呼び出し時にArrayList<Some_Custom_Object>を返すクラスListReturnで静的メソッドgetList()は、Javaの一覧/ Array Listの明確化

がありますが。

  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

私の質問をここにある中で、次のように呼び出し元のクラスで

は、私は2つの方法で関数を呼び出すことができます2番目のシナリオでは、listFromCallオブジェクトを初期化またはインスタンス化する必要はありませんか?メソッドからの戻り値を初期化されていないList/ArrayListオブジェクトに代入しますか?

誰かがここでボンネットの下で何が起こっているのか説明できますか?あなたはそれに書き込む前に、あなたはそれから読み取る場合にのみ、変数を初期化する必要が

おかげ

+0

'ListReturn'?これは標準クラスですか?もしそうでなければ、それはインプレッションに依存するでしょう。 – SacJn

+1

数字1は、自分が何をしているのか分からない人が書いたようです。新しい 'ArrayList'を変数に代入してすぐに別のものに設定することはできません。 – khelwood

答えて

1

最初の方法、のを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( は、2回目の作成および割り当て後にガベージコレクションの対象となります) または1オブジェクトが作成されます(これにより、 、今

あなたが同様に何かをすれば、

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

が、それは同様に何かを表示されます。

あなたのセカンド・ウェイ)ガベージコレクション の対象となり、参照変数にnullを割り当てます

enter image description here

したがって、1-object(of ArrayList)はヒープ上に作成されるかどうかです。

+0

詳細な説明をありがとう、本当にありがとうございます。私はただ1つのクエリしか持っていません。 2番目のアプローチダイアグラム、それはnull値とListReturn.getList()の戻り値の間のORであってはいけません。方法。 – RookieHere

+0

@RookieHereへのアプローチは2番目のアプローチに可能性がありますインスタンスが作成されていない可能性があります。その場合はnullを代入します。 –

+0

Mr.Vishal – RookieHere

2

初期化されていない変数に書き込む場合、コンピュータは戻り値をListReturn.getList()から初期化するため、気にしません。

実際、オブジェクト変数を使用前に上書きする場合は、null以外のオブジェクト変数を無意味に初期化する必要はありません。それ以外の場合は、余分なオブジェクトを作成してガベージコレクトします。

+0

お返事ありがとうございます。余分なオブジェクトを作成しGCingすることは意味があります。ありがとうございます。 – RookieHere