1. 程式人生 > 其它 >java陣列值傳遞還是引用傳遞?

java陣列值傳遞還是引用傳遞?

java陣列值傳遞還是引用傳遞?

背景

近期複習java陣列氣泡排序的時候,發現直接呼叫sort會改變原始陣列的值,但是java中只有值傳遞,呼叫方法應該不會改變實參的值才對。那為何又會發生這樣的情況呢?

//氣泡排序複習
public class ArrayDemo07 {
public static void main(String[] args) {
int[] array1 = {3,445,1341,313,54,134,13,23,6,71};

//System.out.println(Arrays.toString(array1));
int[] array2 = sort(array1);
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
}

public static int[] sort(int[] array){
//外層循壞,一共要走多少次
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length-1-i; j++) {
if (array[j] < array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}

return array;
}
}

結果如圖:

可以看到,呼叫sort後array1的值也改變了。

結論

轉自Eli Shaw(寫得非常詳細)

理論上來說,java不存在引用傳遞,但在使用java中的類作為形參時,由於每次賦值都相當於重新建立了物件,因此看起來像引用傳遞,但實際上還是值傳遞。

(個人感覺理論很難理解,記住結果就行,如上面的sort例子)。

僅個人感覺,歡迎指正!