为什么第一次交换尝试有效,但第二次却无效?

时间:2018-11-10 13:09:49

标签: java oop

package main;

public class Main {
    double radius;
    public Main(double newRadius) {
        radius = newRadius;
    }


    public static void main (String [] args) {
        Main x = new Main(1);
        Main y = new Main(2);
        Main temp;
        // try to swap first time
        temp = x;
        x = y;
        y = temp;
        System.out.println(x.radius + " " +  y.radius);
        x = new Main(1);
        y = new Main(2);
       // try to swap second time
        swap(x, y);
       System.out.println(x.radius + " " + y.radius);
    }
    public static void swap(Main x, Main y) {
        Main temp = x;
        x = y;
        y = temp;
    }

}

为什么第一次工作,但是第二次却没有?第一个没有进行交换,但是第二个没有进行交换。我将引用传递给函数。为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

您误以为引用是如何传递的,您创建了一个范围,在该范围内引用被交换,然后该范围终止。

尝试将字段的值存储在变量中,例如temp = x.radius,然后分配给y.radius。

它第一次起作用的原因是范围相同。