繁体   English   中英

交换功能:Java按值传递密码失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM