1

[[5, 2, 1, 1], [2, 1, 1]] としてデータを含む「link_occur_nodup」という 2 次元ベクトルがあります。今、私がやろうとすると

Vector<Vector<Integer>> temp=(Vector<Vector<Integer>>) link_occur_nodup.clone();
    temp.elementAt(0).set(1, 50);
    System.out.println(temp+" "+link_occur_nodup);

出力は次のとおりです。 [[5, 50, 1, 1], [2, 1, 1]] [[5, 50, 1, 1], [2, 1, 1]] なぜ値が変更されるのか疑問に思っています両方のベクトルで?代わりに、「一時」ベクトルにのみ存在する必要があります。誰か説明してくれませんか?

4

2 に答える 2

12

clone浅いコピーのみを行います。そのためVector、元のオブジェクトと同じオブジェクトへの参照を持つ新しいものを取得します。これは予期される動作です。

別の動作が必要な場合は、内部Vectorの s を自分で手動でコピーする必要があります。(これは、 の使用が賢明でない多くの理由の 1 つですclone。)

于 2013-01-09T21:27:12.797 に答える
3

外側のベクターを複製しました。

複製されたベクターには、元のベクターと同じ内部ベクターが含まれています。

于 2013-01-09T21:27:05.463 に答える