我不想更改方法内的数组

时间:2014-02-19 17:26:00

标签: java arrays sorting methods

当我在我的方法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循环后会发生变化?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

实际上,TempArrayarray是内存中相同位置的两个参考,因此您在修改TempArray时修改array

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

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

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