【问题标题】:I do not want to change the array inside the method [duplicate]我不想更改方法内的数组[重复]
【发布时间】:2014-03-20 05:11:50
【问题描述】:

当我在我的方法public int[] insertionSort(final int array[]) 中放置一个数组时 我不改变数组[]

 public int[] insertionSort(final int array[]) {
        int[] array_for_sorting = array;
        final int[]TempArray = array;
        int n = array_for_sorting.length;
       // printNumbers(TempArray);

        for (int j = 1; j < n; j++) {
            int key = array_for_sorting[j];
            int i = j-1;
            while ( (i > -1) && ( array_for_sorting [i] > key ) ) {
                array_for_sorting [i+1] = array_for_sorting [i];
                i--;
            }
            array_for_sorting[i+1] = key;
           // printNumbers(array_for_sortying);
        }
        //array = TempArray;
        printNumbers(TempArray);// for printing
        return array_for_sorting;
    }

另外,为什么我的 TempArray 在 for 循环之后会发生变化?

【问题讨论】:

    标签: java arrays sorting methods


    【解决方案1】:

    所有数组引用(arrayarray_for_sortingTempArray)都引用同一个数组对象。因此,当您修改数组内容时,它将从其所有引用中可见。

    final 在这里是什么意思,你不能将另一个数组重新分配给最终数组引用。但是,它的内容是可以改变的

    如果需要复制数组,请使用Arrays.copyOf(array, array.length);

    【讨论】:

    • 这里不需要final;您不能重新分配该数组引用。
    • @duffymo :我没听懂你。
    • “您不能将另一个数组重新分配给最终数组引用” - 即使您关闭最终数组,您也无法重新分配引用参数。 Java 是按值传递的。
    • 感谢@KugathasanAbimaran,它现在正在工作:)
    • @duffymo :我的意思不是那个参数数组引用,我的意思是TempArray 最终数组引用。
    【解决方案2】:

    实际上TempArrayarray 是对内存中同一位置的两个引用,因此您在修改array 时正在修改TempArray

    所以你需要创建一个新数组,你可以使用:

    System.arraycopy(array, 0, TempArray, 0, array.length );
    

    然后修改数组,另一个数组不会改变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-06
      • 2019-02-19
      • 2019-11-09
      • 2021-08-01
      • 2022-01-18
      • 1970-01-01
      • 2017-11-11
      • 2021-01-18
      相关资源
      最近更新 更多