为什么swap1方法会给出错误的交换& swap2方法给出真正的交换?

时间:2018-02-08 21:09:04

标签: java oop object swap

在下面的代码中,我想交换两个对象,但交换两个对象的对象引用变量的第一个方法(swap1)不起作用,而另一个方法(swap2)交换了两个对象的值对象'数据字段x.radius& y.radius正常工作,那么第一种方法的问题是什么? 为什么当我交换两个对象的两个引用变量时,它们并没有相互引用?

public class Main {
    public static void main(String [] args) {
        TestCircle circle1 = new TestCircle(1);
        TestCircle circle2 = new TestCircle(2);
        swap2(circle1,circle2);
        System.out.println("After swap2: circle1 = " +
        circle1.radius + " circle2 = " + circle2.radius);

    }

    // false swap
    public static void swap1(TestCircle x, TestCircle y){
        TestCircle temp = x;
        x = y;
        y = temp;
    }

    // real swap
    public static void swap2(TestCircle x, TestCircle y){
        double temp = x.radius;
        x.radius = y.radius;
        y.radius = temp;
    }

}

class TestCircle {
    double radius;

    TestCircle(double newRadius){
    radius = newRadius;
    }
}

0 个答案:

没有答案