public class Demo1 {
public static void main(String[] args) {
int arr[] = {2, 3, 4};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void sort(int arr[]) {
int arr1[] = {0, 3, 4};
arr = Arrays.copyOfRange(arr1, 0, arr1.length);
}
}
输出结果:[2, 3, 4]
在这段代码中,我期望通过调用 sort 方法对 arr 进行修改,并将修改后的结果打印出来。然而,输出的结果仍然是原始的数组 [2, 3, 4]。
这是因为在 Java 中,当你将数组传递给 sort 方法时,实际上是将数组的引用(内存地址)传递给了方法。在 sort 方法内部,你对 arr 进行了重新赋值,但这只是将局部变量 arr 指向了新的数组 arr1,并不影响 main 方法中的原始数组。
解决办法:#
- 对该引用指向的数组进行修改
public class Demo1 {
public static void main(String[] args) {
int arr[] = {2, 3, 4};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void sort(int arr[]) {
// 在sort方法中直接修改arr数组
arr[0] = 0;
arr[1] = 3;
arr[2] = 4;
}
}
- 将 sort 的返回值改为 int [],然后在 main 方法里进行修改
public class Demo1 {
public static void main(String[] args) {
int arr[] = {2, 3, 4};
arr = sort(arr);
System.out.println(Arrays.toString(arr));
}
public static int[] sort(int arr[]) {
int arr1[] = {0, 3, 4};
return Arrays.copyOfRange(arr1, 0, arr1.length);
}
}