我试图在下面跟踪这个预先编写的代码。
我无法理解以下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);
}
答案 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));
}
答案 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);
}
}