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;
    }
 }
 

结果如图:3-5-2.png

可以看到,调用sort后array1的值也改变了。

结论

转自Eli Shaw(写得非常详细)

理论上来说,java不存在引用传递,但在使用java中的类作为形参时,由于每次赋值都相当于重新创建了对象,因此看起来像引用传递,但实际上还是值传递。

(个人感觉理论很难理解,记住结果就行,如上面的sort例子)。

仅个人感觉,欢迎指正!

posted @ 2022-03-05 11:01  南瓜lx  阅读(458)  评论(0)    收藏  举报