Java 我不想更改方法内部的数组
当我在我的方法中放入数组时Java 我不想更改方法内部的数组,java,arrays,sorting,methods,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; // pri
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;
}
public int[]插入排序(最终int数组[]){
int[]数组,用于排序=数组;
final int[]TempArray=数组;
int n=数组,表示排序长度;
//打印号码(临时数组);
对于(int j=1;j-1)和&(数组用于排序[i]>键)){
数组_用于_排序[i+1]=数组_用于_排序[i];
我--;
}
数组_用于_排序[i+1]=键;
//打印编号(用于排序的数组);
}
//数组=临时数组;
PrintNumber(TempArray);//用于打印
返回数组_进行_排序;
}
另外,为什么我的TempArray在for循环之后发生更改?所有数组引用(array
,array\u用于排序
,TempArray
)都引用相同的数组对象。因此,当您修改数组内容时,它将从其所有引用中可见
final在这里的意思是,不能将另一个数组重新分配给final数组引用。但是,它的内容可以改变
如果需要复制数组,请使用实际上
TempArray
和array
是对内存中相同位置的两个引用,因此在修改数组时,您正在修改TempArray
因此,您需要创建一个新数组,如,您可以使用:
System.arraycopy(array, 0, TempArray, 0, array.length );
然后修改数组,另一个数组将不会更改。此处不需要final;您不能重新分配该数组引用。@duffymo:我没有理解您的意思。“您不能将另一个数组重新分配给最终数组引用”-您不能重新分配引用参数,即使您关闭了最终数组引用。Java是按值传递的。谢谢@KugathasanAbimaran它现在正在工作:)@duffymo:我不是指参数数组引用,我是指TempArray
final数组引用。