gpt4 book ai didi

Java 值传递交换方法

转载 作者:行者123 更新时间:2023-12-01 18:29:46 26 4
gpt4 key购买 nike

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

我无法理解以下 java 交换方法如何适用于 vector 对象。我希望以下代码的输出为 (my Vector:)[6],[3],[1] (your Vector:)[5],[1],[6].... 但它是实际上 (myVector:) [5],[1],[6] (yourVector:) [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);
}

最佳答案

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

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 变量传递规则的更多信息

关于Java 值传递交换方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24783690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com