Java中值傳遞的引用傳遞的區別
阿新 • • 發佈:2018-12-14
1.值傳遞
方法呼叫時,實際引數的值傳遞給對應的形式引數,方法執行的過程中形式引數值的改變不影響實際引數的值。如下:
public class DevideTest { public static void change(int a, int b){ int temp =a; a =b; b =temp; //System.out.println("a="+ a +" "+"b="+b); } public static void main(String[] args) { int a =3; int b =4; change(a, b); System.out.println("a="+ a +" "+"b="+b); } }
輸出的結果是:
2.引用傳遞
也叫做地址傳遞,方法呼叫時將實際引數的引用(其實該物件的地址)傳遞給方法中對應的形式引數,方式執行的過程中,對形式引數的操作實際就是對實際引數的操作,所以形式引數值的改變將會改變實際引數值的改變。如下:
public static void change(int[] arr){ arr[0] = 1; } public static void main(String[] args) { int[] arr = {10,2,3,4}; change(arr); System.out.println(arr[0]); }
輸出的結果不是10而是1;
###引用傳遞這塊需要注意的是:
如果引數型別是引用型別,那麼傳過來的就是這個引用引數的副本,這個副本存放的是引數的地址。如果在函式中沒有改變這個副本的地址,而是改變了地址中的值,那麼在函式內的改變會影響到傳入的引數。如果在函式中改變了副本的地址,如new一個,那麼副本就指向了一個新的地址,此時傳入的引數還是指向原來的地址,所以不會改變引數的值。