1. 程式人生 > >Java中值傳遞的引用傳遞的區別

Java中值傳遞的引用傳遞的區別

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一個,那麼副本就指向了一個新的地址,此時傳入的引數還是指向原來的地址,所以不會改變引數的值。