java中 引用傳遞、值傳遞的理解(數組,自定義類,基本數據類型,String類)


代碼部分:

    public static void main(String[] args) {
        testInt();
        testString();
        testArray();
        testX();
    }

    public static void testInt() {
        int a = 1;
        int b = a;
        a = 2;
        System.out.println("b = "+b);
        changeInt(a);
        System.out.println("a = "+a);
    }

    public static void testString() {
        String a = "1";
        String b = a;
        a = "2";
        System.out.println("b = "+b);
        changeString(a);
        System.out.println("a = "+a);
    }

    public static void testArray() {
        int[] a = {1,2,3};
        int[] b = a;
        a[0] = 2;
        System.out.println("b[0] = "+b[0]);
        changeArray(a);
        System.out.println("a[0] = "+a[0]);
    }

    public static void testX() {
        X a = new X("1");
        X b = a;
        a.setValue("2");
        System.out.println("b.value = "+b.getValue());
        changeX(a);
        System.out.println("a.value = "+a.getValue());
    }


    static void changeInt(int a) { a = 100;}

    static void changeString(String a) { a = "100";}

    static void changeArray(int[] a) { a[0] = 100;}

    static void changeX(X a) { a.setValue("100");}

輸出結果補充,如下:

b = 1
a = 2
b = 1
a = 2
b[0] = 2
a[0] = 100
b.value = 2
a.value = 100

結果分析:

將數據賦值或當做參數傳遞的時候:
1,對於基本數據類型,String類, Integer, Double等immutable的類型 都是 值傳遞;
2,對於數組,其他類等,都是引用傳遞;

圖形表達:

//2018-9-17更新
如果非要談論是否java里只有值傳遞,可以把引用傳遞看成:實際上傳遞了引用的值。
補充代碼與輸出如下



public static void testX02() {
    X a = new X("1");
    changeX02(a);
    System.out.println("a.value = "+a.getValue());
    }

static void changeX02(X a) {
    a = new X("");
    a.setValue("100");
}

上方代碼輸出結果:a.value = 1
也就是說testX02中的a,仍然指向最初定義value為“1”的對象;
當做參數調用changeX02后,只能通過引用去改變對象,不能去改變其指向對象;
所以傳遞的是引用的復制,也就是上圖中的黃色箭頭。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM