传递java的参数
我知道,在Java中,参数传递是通过原语类型的值和引用类型(对象)的引用来实现的。为什么在下面的示例中,我认为是一个传递参数的引用,对象点在方法交换后不被修改传递java的参数,java,Java,我知道,在Java中,参数传递是通过原语类型的值和引用类型(对象)的引用来实现的。为什么在下面的示例中,我认为是一个传递参数的引用,对象点在方法交换后不被修改 public class Swap2 { public static void swap(Point p1, Point p2) { Point temp = p1; p1 = p2; p2 = temp; System.out.println("p1.x " +
public class Swap2 {
public static void swap(Point p1, Point p2) {
Point temp = p1;
p1 = p2;
p2 = temp;
System.out.println("p1.x " + p1.x);
System.out.println("p2.x " + p2.x);
}
/**
* @param args
*/
public static void main(String[] args) {
Point p1 = new Point(100,200);
Point p2 = new Point(300,400);
//System.out.println("p1=" + p1.toString());
System.out.println("p1=" + p1);
System.out.println("p2=" + p2);
swap( p1, p2 );
System.out.println("p1.x " + p1.x);
System.out.println("p1=" + p1);
System.out.println("p2=" + p2);
}
}
Java总是按值传递,不管是原语还是引用传递
您正在将引用的虚拟内存地址副本传递给该方法。在该方法中,您只需将复制的引用重新分配给另一个对象
您的代码证明java传递值:)java中的参数总是按值传递,但对于对象,传递的值是对象的引用(指针)
因此,赋值在函数的作用域之外没有任何效果,因为您只是交换两个局部变量的内容(值)。错误-对于原语和引用类型,Java总是按值传递。你的误解是你问题的根源 对象类型的值传递的是引用,因此不能修改它。您可以修改引用指向的对象的状态,但前提是该对象是可变的
对象未通过;它存在于堆上。正如一些人已经指出的那样-引用是值,您只需更改引用即可。您要做的是在对象内部进行更改。那么交换方法就行了 i、 e
等等。如果有帮助的话,我在这里做了一个类比:
错误-Java始终是原语和引用类型的传递值。请阅读,但如果参数是数组,为什么要修改数组内容?因为数组引用不会更改,但其可变状态会更改。
p1.x = p2.x;
p1.y = p2.y;