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的值也改变了。
结论
理论上来说,java不存在引用传递,但在使用java中的类作为形参时,由于每次赋值都相当于重新创建了对象,因此看起来像引用传递,但实际上还是值传递。
(个人感觉理论很难理解,记住结果就行,如上面的sort例子)。

浙公网安备 33010602011771号