有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

对象的java向量,使用setElementAt/set

我尝试将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);

为什么第二个不起作用


共 (1) 个答案

  1. # 1 楼答案

    正如泰德·霍普(Ted Hopp)在评论中所说,这两个变量是相同的,只是第二个变量没有给object2赋值

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

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

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


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