banner
指数爆炸

指数爆炸

我做了对饭 !
github
bilibili

如何在其他方法中修改 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[]) {
        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);
    }
}
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。