Java矢量问题

use*_*ser 0 java vector

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;
Run Code Online (Sandbox Code Playgroud)

在这段代码之后这些陈述是真的v2.get(0).i == 321,myVar.i == 321

Jon*_*eet 5

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

当你调用时v1.add(myVar),它将值复制myVar到向量中......该值是引用.当您更改引用引用的对象时,将通过对该对象的所有引用显示该更改.

可以这样想:假设我有一个带红门的房子,并把我的地址给两个不同的人.第一个人来,把我的门涂成绿色.如果第二个人来看房子,他会看到门也是绿色的......因为他正在通过参考文件的副本(在这种情况下是街道地址)看同一栋房子.

(顺便说一下,你是否有任何理由仍然使用Vector而不是更常见的ArrayList?你显然使用的是最近的JDK,因为你使用的是泛型......)