矢量对象,使用setElementAt / set

时间:2012-09-23 20:01:28

标签: java object vector

我尝试使用已经由复制构造函数修改的新对象在向量位置1中设置我的object2。

    Generic object1 = new Generic();
    //invoke the copy constructor of the Generic class

    Generic object2 = new Generic(object1);

    Vector<Generic> myVector = new Vector<Generic>();
    myVector.add(object1);
    myVector.add(object2);

这个代码在我输入object1的数据后使用它时,object2得到相同的数据

    object2= new Generic(object1);
    myVector.setElementAt(object2, 1);

但是,我认为下面的代码应该与上面的代码相同,但它不会给我与object1相同的数据(只获取object1的默认值)

   myVector.setElementAt(new Generic(object1), 1);

为什么第二个不起作用?

1 个答案:

答案 0 :(得分:1)

正如Ted Hopp在评论中写道,除了第二个变体没有为object2赋予新值外,这两个变体是相同的。

我认为你不知道Java中的引用总是被复制(不是被引用的对象,而是引用本身):在调用myVector.add(object2);之后,你的object2和第二个元素在除了引用相同的对象外,你的向量是独立的。

这意味着如果你更改对象本身(例如调用object2.setValue("foo");,这会影响向量object2和向量中的第二个元素(因为它们引用了但是如果你将另一个/新对象设置为向量的第二个元素object2仍指向旧对象,那么object2和第二个元素在你的向量中是完全独立的。

我希望这会有所帮助: - )


作为旁注:您应该使用List<Generic> myList = new ArrayList<Generic>();,除非您需要提供同步Vector