当我在我的方法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循环后会发生变化?
答案 0 :(得分:2)
所有数组引用(array
,array_for_sorting
,TempArray
)都引用相同的数组对象。因此,当您修改数组内容时,它将从其所有引用中可见。
final在这里意味着什么,你不能将另一个数组重新分配给最终的数组引用。但是,它的内容可以改变
如果您需要复制数组,请使用Arrays.copyOf(array, array.length);
答案 1 :(得分:0)
实际上,TempArray
和array
是内存中相同位置的两个参考,因此您在修改TempArray
时修改array
所以你需要创建一个新的数组,你可以使用:
System.arraycopy(array, 0, TempArray, 0, array.length );
然后修改数组,另一个数组不会改变。