迴歸基礎系列-call by value / call by reference區別與實例

迴歸基礎系列-call by value / call by reference區別與實例

這裏就要說明說明兩個概念:call by value(值傳遞)和call by reference(引用傳遞)
①什麼叫call by value(值傳遞),當往方法裏傳遞如int,double等基本類型的變量時,這就是值傳遞,到方法後,得到一個拷貝副本(形參),在方法裏對形參做任何操作都不會影響原變量。
如:

    public static void test(int a,int b) {
        a = a + b;
    }

    public static void main(String[] args) {
        int a = 1, b = 2;
        test(a, b);
        System.out.println(a +" "+b);
    }

輸出的是1 2

②什麼叫call by reference(引用傳遞),當往方法傳遞類對象時,會拷貝一個副本(形參)到方法裏,這裏的形參跟實參對象是同一地址。這裏要注意,如果用形參內部方法修改形參內容,實參會一起改變。除此之外,形參怎麼改變,實參都不會受到影響,如:
1. 調用形參內部方法進行修改:

    public static void test(StringBuffer str) {
        str.append(" World");
    }

    public static void main(String[] args) {
        StringBuffer string = new StringBuffer("hello");
        test(string);
        System.out.println(string);
    }

輸出:hello world
原因:調用形參內部方法進行修改,實參的值跟着改變。

2.不調用形參內部方法進行操作:

    public static void test(StringBuffer str) {
        str = new StringBuffer("hello world");
    }

    public static void main(String[] args) {
        StringBuffer string = new StringBuffer("hello");
        test(string);
        System.out.println(string);
    }

輸出:hello
原因:拷貝副本做任何除了本對象方法外的操作,都不影響實參。

總結一句話:
記住,無論是怎樣的傳遞,到方法內部都是拷貝副本;除非調用本身的方法,不然的話打死都不會改變就好了。

發佈了30 篇原創文章 · 獲贊 129 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章