2

これを行う場合[準Javaコード]:

while (loop)
{
    localObject = getDataForObject();
    globalPublicStaticArrayList<Object>.add(localObject);
}

globalPublicStaticArrayList のすべての要素は同一であり、最後に追加された localObject のコピーと同じです。デバッガーでループを実行したところ、オブジェクトが追加されるとすぐに、globalPublicStaticArrayList のすべての要素にコピーされることがわかりました。

私が見つけた回避策は次のとおりです。

while (loop)
{
    localObject = getDataForObject();
    globalPublicStaticArrayList<Object>.add(new Object(localObject.member1, localObject.member2,...));
}

Javaの参照渡しと関係がありますか? 最初のケースで要素が同一なのはなぜですか? ありがとう。

4

3 に答える 3

5

Java は値渡しを使用しますが、ここではそれらの値はオブジェクトへの参照です。

リストに追加しているのは、オブジェクトのコピーではなく、参照のコピーです。メソッドは、呼び出すたびに同じオブジェクトを返しました。おそらく毎回新しいオブジェクトを返す必要があるため、この回避策は必要ありません。

于 2012-11-09T12:55:27.653 に答える
2
globalPublicStaticArrayList<Object>.add(localObject);

ここでは、localObject 参照を渡しています。すべてのオブジェクトのコピーが必要で、反復ごとに新しいオブジェクトを作成する必要があります

于 2012-11-09T12:55:51.800 に答える
0

getDataForObject() では、戻り値の型の「新しい」オブジェクトを作成していない可能性があります。そのため、すべてのオブジェクトが同じアドレスを指しています。

于 2012-11-09T12:59:04.147 に答える