Java传递值交换方法
我试图在下面跟踪这个预先编写的代码
我无法理解下面的java交换方法如何适用于向量对象。我希望下面代码的输出是(我的向量:)[6]、[3]、[1](你的向量:)[5]、[1]、[6]。。。。但实际上是(我的向量:)[5],[1],[6](你的向量:)[6],[3],[1],[5],[1],[6]
谁能给我解释一下吗?我试图跟踪这段代码,我想我不理解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);
}
# 1 楼答案
在Java中,通过值传递对象引用。这意味着您对对象所做的任何更改都将反映在传入的对象中,例如在本例中:
这将更改传入的对象myVector。但是,对引用所做的任何更改都不会影响调用对象。像这样的
不会修改原件
所以你的代码的作用是
最后,所有这些都是在v2的后面加上v1。v1保持不变。 下面是a link,提供了有关Java变量传递规则的更多信息
# 2 楼答案
你有
# 3 楼答案
您所做的是将temp作为v1值的引用。然后取v1,并将其分配给一个新的空向量(这将应用于主方法中的向量)。接下来用向量2的值(6,3,1)填充它。v1现在完成了
现在v2保持不变,仍然包含(6,3,1)。您可以添加temp的值(仍然指向v1(5,1,6)的旧值),并将它们放在v2的当前值之上
# 4 楼答案
在
swapContents
方法内部移动引用是行不通的。像这样的东西会:我希望这有帮助
# 5 楼答案
在java中,对象是通过引用传递的