一个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 的新手,请阅读原始和非原始数据类型以及堆栈和堆内存。
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 的新手,请阅读原始和非原始数据类型以及堆栈和堆内存。