Java:矢量添加功能浅吗?

时间:2012-11-30 20:10:33

标签: java vector deep-copy shallow-copy

使用add函数将对象添加到矢量时,它是浅拷贝还是深拷贝? 如果它很浅,则意味着如果更改向量中的对象,您将更改对象的原始副本吗?

3 个答案:

答案 0 :(得分:3)

向量只保存指向您添加的对象的指针,它不会创建“深度”副本。 (在Java中没有通用的机制来创建任何任意Object的“深层”副本,因此库集合提供这样的功能会很困难!)

答案 1 :(得分:1)

它是浅拷贝,实际上它根本不是拷贝,列表具有对同一对象的引用。如果要传递深层副本,请使用实现Cloneable iface和方法clone(),或者可以使用复制构造函数。

答案 2 :(得分: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());