3

add 関数を使用してベクターにオブジェクトを追加する場合、それは浅いコピーですか、それとも深いコピーですか? 浅い場合は、ベクトル内のオブジェクトを変更すると、オブジェクトの元のコピーが変更されることを意味しますか?

4

3 に答える 3

3

ベクターは、追加したオブジェクトへのポインターのみを保持し、「深い」コピーは作成しません。(Java には、任意のオブジェクトの「深い」コピーを作成する普遍的なメカニズムがないため、ライブラリ コレクションがそのような機能を提供するのは難しいでしょう!)

于 2012-11-30T20:18:26.503 に答える
1

それは浅いコピーですが、実際にはまったくコピーではありません。リストには同じオブジェクトへの参照があります。ディープ コピーを渡したい場合は、implement Cloneable iface とメソッド clone() を使用するか、コピー コンストラクターを使用できます。

于 2012-11-30T20:19:03.343 に答える
0

たとえば、それは浅いです。

Vector<MyObj> victor = new Vector<MyObj>();
MyObj foo = new MyObj();
MyObj bar = new MyObj();
foo.setValue(5);
bar.setValue(6);
victor.add(foo);
victor.add(bar);

foo.setValue(3);
victor.get(1).setValue(7);

// output: 3, even though it went into the vector as 5
System.out.println(victor.get(0).getValue()); 

// output: 7, even though we changed the value of the vector 'object'
System.out.println(bar.getValue());
于 2012-11-30T20:23:05.240 に答える