输出交换功能

时间:2016-11-03 22:40:48

标签: java

我是java新手,也是stackoverflow的新手。这是我教科书中的代码:

public static void main(String[] args) {
    Circle circle1 = new Circle(1);
    Circle circle2 = new Circle(2);

    swap1(circle1, circle2);
    System.out.println("After swap1: circle1 = " + 
    circle1.radius + " circle2 = " + circle2.radius);

    swap2(circle1, circle2);
    System.out.println("After swap2: circle1 = " + 
    circle1.radius + " circle2 = " + circle2.radius);
}


public static void swap1(Circle x, Circle y) {
    Circle temp = x;
    x = y;
    y = temp;
}

public static void swap2(Circle x, Circle y) {
    double temp = x.radius;
    x.radius = y.radius;
    y.radius = temp;
}


class Circle {
    double radius;

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

输出显示为“在swap1之后:circle1 = 1.0 circle2 = 2.0” “在swap2之后:circle1 = 2.0 circle2 = 1.0”我的问题是这是如何工作的?为什么第一个打印声明与第二个打印声明不一样?你不允许交换两个不同的对象吗?提前致谢。

1 个答案:

答案 0 :(得分:0)

在这两个函数中,您有两个对象作为参数,但您没有发送对象,实际上是在发送对象的内存引用。如果更改函数内的对象,则在函数(swap2示例)之后将反映该更改。在swap1中,您只是交换对象的内存引用,该更改将不会在函数后反映出来。