-1

新しいリスト オブジェクトを作成しようとしています。新しいオブジェクトを古い既存のオブジェクトに設定しました。

List<string> names = new List<string>();
names = olderList;

私が抱えている問題は、olderListが変更され、名前も変更されると、名前リストがolderListを指すことです。foreach で値をコピーしようとしましたが、olderList を参照して同じことをしています。

4

2 に答える 2

0

Javaで割り当てを行うときは、コンテンツではなく参照をコピーします。したがって、名前はolderListと同じメモリアドレスを指します。

すべての値をコピーするときは、同じことを行います。名前リストに、olderListに格納されている各文字列への別の参照を割り当てます。

問題を解決する可能性のあるアイデアは、foreachを使用することですが、各要素を追加する代わりに、古い文字列のコピーである新しい文字列を作成します。これは次のようになります。

names=new List<String>();
foreach (String s: olderList) {
  names.add(new String(s));
}

Oracleのリファレンスサイトで、使用したコンストラクタとその意味を確認してください。

于 2012-06-13T20:56:56.723 に答える
0

新しいリストを作成し、すべての要素を複製する必要があります。電話すれば

olderList.clone()

浅いコピー (つまり、最初のリストのオブジェクトへの参照を含む新しいリスト) が得られます。次のようにする必要があります。

for(String name : olderList){
    newList.add(name.clone());
}

参照: Java api CloneableObject.clone()

于 2012-06-13T21:04:09.873 に答える