2009-05-27 5 views
0
List list = new ArrayList(); 


String[] test = {"ram", "mohan", "anil", "mukesh", "mittal"}; 

for(int i =0; i < test.length; i++) 

{ 

    A a = new A(); 

    a.setName(test[i]); 

    list.add(a); 

} 

各ループでJVMがオブジェクトaの作成を処理する方法は?異なるインスタンス間の「リスト」の違い各繰り返しでオブジェクトを作成することをお勧めしますか?そうでない場合は、オブジェクトをリストに追加する最適な解決策は何ですか。jvmがループ内でオブジェクトを作成する方法

+0

少しコンパイルエラーが発生します。タイプリストをインスタンス化できません。 – guerda

答えて

6

はあなたの例では、新しいオブジェクトがループの各反復で作成されます。それはあなたがそれらすべてを呼び出すことを気にしないので、リストには、「」あなたのコードでは、それがたび、あなたが

a = new A(); 

を呼び出すたびに再割り当てされます参照してそれらを追跡し、それらを区別することができますコード行が呼び出されると、ヒープに新しいオブジェクトが作成され、メモリ内のアドレスが参照に割り当てられます。リストが変数名ではなくレコードを保持するのはその参照です。

はこれが(私はあなたのコードをコンパイルしようとしたときに修正できると仮定している他の人が言及している構文エラー、別に)リストを移入する完全に罰金、通常の方法です。

2

リストは作成されたものの各インスタンスへの参照を保持しています。ループ内に各オブジェクトを作成するのは良いことです(ループの外側に 'a'変数を宣言してから各繰り返しを再度割り当てることとは対照的です)。

+0

はい。あなたは正しいです。私の友人の一人は、あまりにも多くのインスタンスを作成することは良い習慣ではないと私に言った。アプリケーションのパフォーマンスを低下させる可能性があります。 – Shashi

+2

@Shashi Bhushan:すべてのインスタンスが必要な場合を除き、もちろん作成するのが理にかなっています。 :) – Eddie

+0

@shashiしかし、複数のインスタンスを作成するのは大丈夫です。 – jrharshath

1

各反復で新しいオブジェクトを作成することをお勧めしますか? 私の友人の一人は、あまりにも多くのインスタンスを作成するのは良い方法ではないと私に言った。

あなたは別の個々のインスタンスが必要な場合は、それらを作成する必要があります。 リストにはそれぞれ異なる名前の5つのオブジェクト(ram、mohan、anilなど)が必要なため、ループの繰り返しごとに新しいオブジェクトが必要です。 5つの名前を他にどのように保管していますか?

ループの変数a外を宣言するためとして、私はそれが差性能面を作り、また、読みやすさを減少させないと思います。

A a; // dont do this 
for(int i =0; i < test.length; i++){ 
    a = new A(); 
    a.setName(test[i]); 
    list.add(a); 
} 

あなたはJVMの私の理解が正しければ、掲示コードが

for (String name : test) 
{ 
    list.add(new A(name)); 
} 

に比べてもパフォーマンスの違いもありませんため、各ループ

for(String name: test){ 
    A a = new A(); 
    a.setName(name); 
    list.add(a); 
} 
1

に興味があるかもしれません(もちろん、コンストラクタA(String s)は特定の名前の新しいインスタンスを作成する別の方法であると仮定します)

関連する問題