传递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 " +

我知道,在Java中,参数传递是通过原语类型的值和引用类型(对象)的引用来实现的。为什么在下面的示例中,我认为是一个传递参数的引用,对象点在方法交换后不被修改

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;