12

に次のコードがありますThisClass

static ArrayList<MyClass> classlist; 

私が電話した場合:

ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);

そして、次の行をもう一度呼び出します。

ThisClass.classlist = new ArrayList<MyClass>();

リストをリセットしThisClass.classlistますか、つまり、classlist リストにオブジェクトが含まれなくなりますか?

4

3 に答える 3

29

以下に図を示します。

コード 1: ArrayList の作成とオブジェクトの追加

ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);

結果は次のようになります。

ここに画像の説明を入力

コード 2: 再初期化によるリセット

ThisClass.classlist = new ArrayList<MyClass>();

結果はこれになります-新しいオブジェクトを指すようにしてリセットします:

ここに画像の説明を入力

コード 3: オブジェクトのクリアによるリセット

「オブジェクトを含まないようにする」ためにすべきことは次のとおりです。

ThisClass.classlist.clear();

Clear はすべての要素をループし、それらをnullにします。内部的には、ArrayList もそのオブジェクトのメモリ アドレスを指しますが、簡単にするために、このメソッドを呼び出すとオブジェクトが「削除」されると考えてください。

ここに画像の説明を入力

コード 4: クラスリスト全体をリセットする

「ArrayListを含まないようにしたい」場合は、次のようにします。

ThisClass.classlist = null;

つまり、次のようになります。

ここに画像の説明を入力

また、質問のタイトルに「static ArrayList」が含まれていることに注意してください。staticこの文脈では関係ありません。オブジェクトが静的かどうかに関係なく、問題の結果は同じになります。

于 2013-04-13T18:50:43.927 に答える
5

通話中

ThisClass.classlist = new ArrayList<MyClass>();

配列をクリアしThisClass.classlistます (実際には、新しい配列を作成しArrayList、古い配列があった場所に配置します)。

そうは言っても、使用する方がはるかに優れています:

ThisClass.classlist.clear();

これはより明確なアプローチです。コードの真の意図を示し、実際に達成しようとしていることを示し、コードをより読みやすく/保守しやすくします。

于 2013-04-13T18:49:33.977 に答える
2

正しい。

技術的には、そうすることをクリアしません。ArrayList実際に新しい empty をインスタンス化しますArrayList

于 2013-04-13T18:32:40.143 に答える