2016-11-03 94 views
-1

我是新来的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” 我的问题是如何工作的呢?为什么不是第一次印刷声明与第二次印刷声明相同?你不能交换两个不同的物体吗?提前致谢。

+0

您不能修改调用者的参考。 –

回答

0

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