一个void排序算法怎么能有"return"个结果呢?

How can a void sorting algorithm "return" a result?

public static void main(String[] args) {
    int sizeOfTestArray = 50;
    int[] testArray = new int[sizeOfTestArray];
    Random random = new Random();
    for (int i = 0; i < sizeOfTestArray; i++) {
        testArray[i] = random.nextInt(100);
    }

    System.out.println(Arrays.toString(testArray));
    bubbleSort(testArray);
    System.out.println(Arrays.toString(testArray));
}

public static void bubbleSort(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr.length - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

如果 Java 是按值传递,我如何才能在我的 bubbleSort 方法和 "return" bubbleSorted testArray 中操作 testArray?在我的程序退出 bubbleSort 方法后,不应该销毁 bubbleSorted testArray 吗?请帮助我理解这一点,因为我在网上获得关于 Java 是按值传递还是按引用传递的相互矛盾的信息。

If Java is pass-by-value how is it that I can manipulate testArray inside my bubbleSort method and "return" the bubbleSorted testArray?

因为数组是可变的:它们的状态可以改变。所以该方法不会 return 任何东西,但它确实会更改您传入的值引用的对象的状态。

您传递的内容(对象引用)是按值传递的。但是它引用的对象在内存的其他地方,引用只是告诉 JVM 它在哪里的一种方式。 "reference" 一词的用法与传递引用中的用法不同(后者具体是指对 变量 的引用,而不是对象)。

当您将数组传递给任何函数时,传递的是该数组的地址,它存在于堆栈内存中。没有形成新数组,它只是传递给函数的键,以便函数可以访问数据成员。 由于数组是非原始数据类型,元素存在于堆内存中,而这个连续列表的地址存在于栈内存中。因此,当您传递一个数组时,该函数直接作用于堆内存中存在的成员。 如果您是 java 的新手,请阅读原始和非原始数据类型以及堆栈和堆内存。