java陣列值傳遞還是引用傳遞?
阿新 • • 發佈:2022-03-05
背景
近期複習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的值也改變了。
結論
理論上來說,java不存在引用傳遞,但在使用java中的類作為形參時,由於每次賦值都相當於重新建立了物件,因此看起來像引用傳遞,但實際上還是值傳遞。
(個人感覺理論很難理解,記住結果就行,如上面的sort例子)。