public void swap(Point var1, Point var2)
{
var1.x = 100;
var1.y = 100;
Point temp = var1;
var1 = var2;
var2 = temp;
}
public static void main(String [] args)
{
Point p1 = new Point(0,0);
Point p2 = new Point(0,0);
System.out.println("A: " + p1.x + " B: " +p1.y);
System.out.println("A: " + p2.x + " B: " +p2.y);
System.out.println(" ");
swap(p1,p2);
System.out.println("A: " + p1.x + " B:" + p1.y);
System.out.println("A: " + p2.x + " B: " +p2.y);
}
运行代码会产生:
A: 0 B: 0
A: 0 B: 0
A: 100 B: 100
A: 0 B: 0
我了解函数如何在按值传递时更改 p1 的值。 我不明白的是为什么 p1 和 p2 的交换失败。
最佳答案
Java始终都是按值传递。这是基元和对象的唯一机制。
关键是要知道为对象传递了什么。它不是物体本身;而是物体本身。存在于堆中。这是通过值传递的对该对象的引用。
您无法修改传递的引用并将新值返回给调用者,但您可以修改它引用的对象的状态 - 如果它是可变的并且公开了适当的方法供您调用。
与指针的类交换(类似于 C 语言中可能的情况)不起作用,因为您无法更改传递的引用所指的内容并将新值返回给调用者。
关于java - 交换函数: Java Pass-By-Value code failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11102878/