2016-11-03 83 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中,您只是交換對象的內存引用,這些更改將不會反映在該函數之後。