java值傳遞與引用傳遞

1、按值傳遞是什麼

傳遞的是值的拷貝,也就是說傳遞後就互不相關了(基本數據類型和String都是這樣)。

public class Test {
    private void test(int a){
            a = 5;
            System.out.println("test方法中的a==="+a);
}
    public static void main(String[] args) {
            TempTest t = new TempTest();
            int a = 3;
            t.test(a);//傳遞後,test方法對變量值的改變不影響這裏的a
            System.out.println(”main方法中的a===”+a);
        }
}
運行結果是:test方法中的a===5   main方法中的a===3

2、按引用傳遞是什麼

在方法調用時,傳遞前和傳遞後都指向同一個引用(也就是同一個內存空間)。

public class TempTest {

private void test1(A a){
        a.age = 20;
        System.out.println("test1方法中的age="+a.age);
}
public static void main(String[] args) {
                TempTest t = new TempTest();
                A a = new A();
                a.age=10;
                t.test1(a); //這裏傳遞的參數a就是按引用傳遞
                System.out.println(”main方法中的age=”+a.age);
        }
}
class A{
            public int age = 0;
}
運行結果如下:test1方法中的age=20     main方法中的age=20

3、解釋

值傳遞:針對基本類型
  方法調用時,實際參數把它的傳遞給對應的形式參數,函數接收的是原始值的一個copy,此時內存中存在兩個相等的基本類型,即實際參數和形式參數,後面方法中的操作都是對形參這個值的修改,不影響實際參數的值。
  String表現爲值傳遞,主要是因爲String是不可變的!如何理解不可變?我們一般說的改變一個String變量,其實並不是改變的這個String本身,而是用一個新的String去替換掉原來的,原來的String本身並沒有變。

String str1 = "old";
str1 = "new";//不是在原內存地址上修改數據,而是重新指向一個新對象,新地址。  
  //對String對象的任何改變都不影響到原對象,相關的任何操作都會生成新的對象

引用傳遞:
  方法調用時,實際參數的引用(地址,而不是參數的值)被傳遞給方法中相對應的形式參數,函數接收的是原始值的內存地址;在方法執行中,形參和實參內容相同,指向同一塊內存地址,方法執行中對引用的操作將會影響到實際對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章