[英]Swapping function : Java Pass-By-Value code failed
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的可能,带有指针的类交换不起作用,因为您无法更改传递的引用所引用的内容,也无法将新值返回给调用者。
myFunction()
刚换到里面的函数的两个对象(这是从外面那些不同)的引用,但不换的功能,也没有对象实例本身之外的参考!
在正式参数位置将生成一个引用的副本,因此将有一个指向Point实例的新引用
对象是通过引用分配的,不是克隆的,但参数保留为对实际对象的引用,它们不会变成“对引用的引用”。
我的意思是, var1
最初引用的对象与p1
相同,但是随后您将var1
更改为引用另一个对象。 这并不影响什么对象p1
引用,因为var1
不是一个参考p1
,只有同一个对象作为参考p1
被引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.