Java向量问题

Java向量问题,java,vector,Java,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);

向量中的元素是否为原始元素的克隆/副本

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;
SomeType myVar=newsometype();
myVar.something=“AStringValue”;
myVar.i=123;
向量v1=新向量();
v1.add(myVar);
向量v2=新向量();
v2.增加(myVar);
v1.get(0),i=321;

在这个代码之后,这些语句是真的吗
v2.get(0).i==321
myVar.i==321

否,
向量
包含对原始对象的引用-与
myVar
变量一样。理解一个变量(或者任何表达式)实际上永远不会有一个作为对象的值是非常重要的。该值要么是基元类型值(整数、字符等),要么是对对象的引用,要么为null

当您调用
v1.add(myVar)
时,它会将
myVar的值复制到向量中。。。该值作为引用。当您更改引用的对象时,该更改将通过对该对象的所有引用可见

这样想:假设我有一栋红门的房子,把我的地址给两个不同的人。第一个人来把我的门漆成绿色。如果第二个人来看看房子,他会看到门也是绿色的。。。因为他在看同一栋房子,通过参考资料的副本(本例中的街道地址)


(顺便说一句,您是否仍然使用
Vector
而不是更常见的
ArrayList
?您显然在使用最新的ish JDK,因为您使用的是泛型…

否,
Vector
包含对原始对象的引用,就像您的
myVar
变量一样。理解一个变量(或者任何表达式)实际上永远不会有一个作为对象的值是非常重要的。该值要么是基元类型值(整数、字符等),要么是对对象的引用,要么为null

当您调用
v1.add(myVar)
时,它会将
myVar的值复制到向量中。。。该值作为引用。当您更改引用的对象时,该更改将通过对该对象的所有引用可见

这样想:假设我有一栋红门的房子,把我的地址给两个不同的人。第一个人来把我的门漆成绿色。如果第二个人来看看房子,他会看到门也是绿色的。。。因为他在看同一栋房子,通过参考资料的副本(本例中的街道地址)


(顺便说一句,您是否仍在使用
Vector
而不是更常见的
ArrayList
?您显然在使用最新的ish JDK,因为您使用的是泛型…

它不是克隆,而是对同一对象的引用。如果你更新从向量中得到的一个,你就是在更新你放入两个向量中的一个。

它不是克隆,而是对同一对象的引用。如果你更新从向量中得到的一个,你就是在更新你放入两个向量中的一个。

So v2.get(0)。i myVar。我也会是321岁吗?@János,是的。顺便说一句,
Vector
已经过时了-最好使用
ArrayList
来代替。我很高兴听到这个消息:)@János:有什么东西阻止你运行代码来找出答案吗?;)我只是想确定一下。顺便说一句,我使用的是
Vector
,因为我在应用程序中使用了
JList
。而
setListData
Vector
作为参数。因此v2.get(0)。i myVar。我也将是321?@János,是的,它将是。顺便说一句,
Vector
已经过时了-最好使用
ArrayList
来代替。我很高兴听到这个消息:)@János:有什么东西阻止你运行代码来找出答案吗?;)我只是想确定一下。顺便说一句,我使用的是
Vector
,因为我在应用程序中使用了
JList
。而
setListData
向量
作为参数。