Vector
中的元素是原始的克隆/副本吗?
SomeType myVar = new SomeType();
myVar.something = "AStringValue";
myVar.i = 123;
Vector<SomeType> v1 = new Vector<SomeType>();
v1.add(myVar);
Vector<SomeType> v2 = new Vector<SomeType>();
v2.add(myVar);
v1.get(0).i = 321;
在此代码之后,这些陈述是真的v2.get(0).i == 321
,myVar.i == 321
?
答案 0 :(得分:5)
不,Vector
包含原始对象的引用 - 与您的myVar
变量一样。理解变量(或实际上任何表达式)永远实际上具有作为对象的值是非常重要的。该值可以是基本类型值(整数,字符等)或对象的引用,也可以是null。
当您致电v1.add(myVar)
时,会将myVar
的值复制到向量中......该值作为参考。当您更改引用引用的对象时,将通过对象的所有引用显示该更改。
这样想:假设我有一扇带红门的房子,并把我的地址告诉两个不同的人。第一个人来,把我的门涂成绿色。如果第二个人来看房子,他会看到门也是绿色的......因为他正在通过参考的副本看着同样的房子 (在这种情况下是街道地址)。
(顺便说一句,是否有任何理由你仍在使用Vector
而不是更常见的ArrayList
?你显然正在使用最近的JDK,因为你正在使用泛型...)
答案 1 :(得分:1)
它不是克隆,它是对同一个对象的引用。如果你更新从矢量中得到的那个,你就会更新你放入两个矢量的那个。