2016-11-03 10 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; 
    } 
} 

出力が "CIRCLE1 = 1.0 CIRCLE2 = 2.0 swap1後" として読み込む: "swap2後:CIRCLE1 = 2.0 CIRCLE2 = 1.0" 私の質問は、この作業を行う方法ですここに私の教科書からのコードはありますか?最初のprint文が2番目のprint文と同じでないのはなぜですか? 2つの異なるオブジェクトを交換することはできませんか?前もって感謝します。

+0

発信者の参照を変更することはできません。 –

答えて

0

両方の関数では、パラメータとして2つのオブジェクトがありますが、実際にオブジェクトのメモリ参照を送信するオブジェクトは送信していません。関数内でオブジェクトを変更すると、その変更は関数の後に反映されます(swap2の例)。スワップ1では、オブジェクトのメモリ参照のみをスワップしています。その変更は関数の後には反映されません。