Java_如何交換兩個對象

java語言中,方法參數有一下幾個注意點:

  1. 一個方法不能修改一個基本數據類型的參數(即數值型和布爾型)
  2. 一個方法可以改變一個對象參數的狀態
  3. 一個方法不能讓對象參數引用一個新的對象
class A{
    String name ;
    public A(String name){
        this.name = name;
    }

    public A clone(){
        return this;
    }
}


class WrapperA{
    A a ;

    public WrapperA(A a){
        this.a  = a;
    }
}
public class demo{
    public static void main(String[] args) {
        //1.驗證第一條定義
        int number1 = 100;

        int number2 = 200;

        swapNumber(number1, number2);
        //結果是 100  200  並沒有改變基本類型
        System.out.println(number1+"  "+number2);


        //2.驗證第二條定義

        A testA = new A("testA1");

        change(testA);
        //結果是testA2  改變了引用類型
        System.out.println(testA.name);


        //驗證第三條定義
        A a1 = new A("1");

        A a2 = new A("2");

        swapA(a1, a2);

        /*結果還是 1  2   並沒有交換 一個方法並不能讓對象參數引用一個新的對象。
            原理:
                當a1傳入swapA時,複製了一個引用對象x,也就是swapA中的a1
                swapA中將x指向了a2
                但是a1 並沒有改變
                所以改變的僅僅是複製的引用,原來的引用並沒有改變
        */
        System.out.println(a1.name+"    "+a2.name);


        //如果想交換可以使用以下方法

        WrapperA wa1 = new WrapperA(a1);
        WrapperA wa2 = new WrapperA(a2);
        swapWrapperA(wa1, wa2);

        a1 = wa1.a;
        a2 = wa2.a;

        //a1 和 a2 被改變
        System.out.println(a1.name+"    "+a2.name);


    }

    //用於測試第一條定義
    static void swapNumber(int a , int b){
        a += b;
        b = a - b;
        a = a - b;

    }

    //用於測試第二條定義
    static void change(A a){
        a.name = "testA2";
    }

    //用於測試第三條定義
    static void swapA(A a1 , A a2){
        A a3 = a1.clone() ;
        a1 = a2.clone();
        a2 = a3;

        System.out.println(a1.name);



    }
    //交換方法
    static void swapWrapperA(WrapperA a1,WrapperA a2){
        A a3 = a1.a;
        a1.a = a2.a;
        a2.a = a3;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章