Java Pass By Value Swap方法

时间:2014-07-16 14:40:12

标签: java swap

我试图在下面跟踪这个预先编写的代码。

我无法理解以下java交换方法如何适用于矢量对象。我希望以下代码的输出为(我的Vector:)[6],[3],[1](你的Vector:)[5],[1],[6] ....但它实际上是(myVector :) [5],[1],[6](yourVector :) [6],[3],[1],[5],[1],[6] < / p>

有人可以向我解释一下吗?我试图追踪这段代码,我想我不理解&#34;传递价值&#34; java的一部分。

提前致谢。

public static void swapContents(Vector v1, Vector v2){
    Vector temp = v1;
    v1 = new Vector();
    for(int i = 0; i<v2.size(); i++)
        v1.add(v2.get(i));
    for(int j = 0; j< temp.size(); j++)
        v2.add(temp.get(j));
}


public static void main(String[] args){

   Vector myVector = new Vector();
   myVector.add(new Integer(5));
   myVector.add(new Integer(1));
   myVector.add(new Integer(6));

   Vector yourVector = new Vector();
   yourVector.add(new Integer(6));
   yourVector.add(new Integer(3));
   yourVector.add(new Integer(1));

   swapContents(myVector, yourVector);

   System.out.println(myVector);
   System.out.println(yourVector);
 }

5 个答案:

答案 0 :(得分:4)

在Java中,您按值传递对象引用。这意味着您对对象所做的任何更改都将反映在传入的对象中,例如:

myVector.add(v2.get(i))

这会更改传入的对象myVector。但是,对引用所做的任何更改都不会影响调用对象。像这样的东西

myVector = new Vector();

不会修改原件。

那么你的代码就是这个

//Creates a new reference to the object passed in, v1
Vector temp = v1;
//Sets the reference v1 to point to a new object, which will not affect the originals
v1 = new Vector();
for(int i = 0; i<v2.size(); i++)
    //adds the contents of v2 into the new object
    //This has no impact on the original objects
    v1.add(v2.get(i));
for(int j = 0; j< temp.size(); j++)
    //adds the contents of what was passed in as v1 into v2
    v2.add(temp.get(j));

所以最后这一切都是将v1添加到v2的背面。 v1保持不变。 这里是a link,其中包含有关Java变量传递规则的更多信息

答案 1 :(得分:0)

你有

public static void swapContents(Vector v1, Vector v2){
    Vector temp = v1;
    v1 = new Vector();
    for(int i = 0; i<v2.size(); i++)
        v1.add(v2.get(i));
    for(int j = 0; j< temp.size(); j++)
        v2.add(temp.get(j));
}
  • 首先保存v1
  • 然后你制作一个新的v1
  • 然后你从v2
  • 添加东西
  • 然后你将v1的东西添加到v2(但v2仍然有它的原始内容......)

答案 2 :(得分:0)

移动swapContents方法内部的引用不起作用。这样的事情会:

public static void swapContents(Vector v1, Vector v2){
    Vector tmp1 = new Vector(v1);
    Vector tmp2 = new Vector(v2);
    v1.clear();
    v2.clear();
    for(Object o : tmp1) {
      v2.add(o);
    }
    for(Object o : tmp2) {
      v1.add(o);
    }
}

我希望有所帮助。

答案 3 :(得分:0)

您正在做的是将temp作为对v1值的引用。然后你取v1,并将它分配给一个新的空向量(这将应用于main方法中的向量)。接下来,用向量2的值(6,3,1)填充它。 v1现在已经完成。

现在v2保持不变,仍然包含(6,3,1)。你可以添加临时值(它们仍然指向v1的旧值,(5,1,6)并将它们放在v2的当前值之上。

答案 4 :(得分:0)

对象在java中通过引用传递。

Public static void swap(Vector v1,Vector v2) {
    Vector tmp = new Vector();
    for (object obj : v1) {
        tmp.add(obj);
    }
    v1.clear();
    for (object obj : v2) {
         v1.add(obj);
    }
    v2.clear();
    for (object obj : tmp) {
        v2.add(obj);
    }
}