1. 程式人生 > >Java方法中引用型別的形參傳遞問題

Java方法中引用型別的形參傳遞問題

眾所周知,Java方法的形參如果是基本型別,是值傳遞,也就是說實參將數值傳遞給形參後,形參對值的操作跟實參變數毫無關係,舉例:

public static void change(int a, int b){
	a = a + b; 
}
int c = 1, d = 2;

change(c , d);

這時輸出c, 其值還是1。

假如是引用型別作為形參:

public static void change(Object a , Object b){
<pre name="code" class="java">	Object temp = a ;
<pre name="code" class="java">	a = b;
<pre name="code" class="java">	b = temp;
}

Object c = new Object();

Object d = new Object();

change(c , d);

這時,形參a是一個新的引用,指向c引用的內容,形參b是一個新的指向d的引用,也就是a、c同時指向記憶體中的一個位置,b、d同時指向記憶體中的另一個位置。那麼此時在方法中交換的引用是a、b兩個引用指向的地址,此時對c、d的引用、內容均沒有影響,但,如果在方法中c.xxx = newValue,那麼此時a、c共同指向的記憶體中的內容發生了改變。

那麼,如何更改物件陣列中的兩個元素的引用呢?

change(array[ObjectA] , array[ObjectB]);

這樣肯定是不行的,此時,我們要把陣列的引用傳遞給方法:

public static void change(Object[] , int indexA , int indexB){//把將要傳遞引用的陣列元素的下標 傳遞給 形參
<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">	Object temp = Object[indexA];
<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">	Object[indexA] = Object[indexB];
<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">	Object[indexB] = temp;
}

交換兩個基本型別陣列元素的值也是用同樣的方法。