Java方法中引用型別的形參傳遞問題
阿新 • • 發佈:2019-01-09
眾所周知,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; }
交換兩個基本型別陣列元素的值也是用同樣的方法。