0

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

    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);

第二个怎么不行?

4

1 回答 1

1

正如 Ted Hopp 在他的评论中所写,这两个变体是相同的,只是第二个变体没有为object2.

我认为您没有意识到 Java 中的引用总是被复制的事实(不是被引用的对象,而是引用本身):在调用之后myVector.add(object2);,您object2和向量中的第二个元素是独立的,除了引用同一个对象。

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

我希望这有帮助 :-)


附带说明:您可能应该使用List<Generic> myList = new ArrayList<Generic>();,除非您需要同步Vector提供。

于 2012-09-23T23:53:07.080 回答