2014-02-19 88 views
1

當我把一個數組我的方法裏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; 
    } 

也,爲何在for循環我TempArray變化?

回答

2

所有數組引用(arrayarray_for_sorting,TempArray)都引用相同的數組對象。因此,當您修改數組內容時,它將從其所有參考中可見。

這裏最後的意思是什麼,你不能重新分配另一個數組到最後的數組引用。但是,它的內容可以改變

如果你需要複製一個數組,使用Arrays.copyOf(array, array.length);

+0

你不需要在這裏決定;您不能重新分配該數組引用。 – duffymo

+0

@duffymo:我沒有得到你。 –

+0

「不能重新分配另一個數組到最終數組引用」 - 即使關閉最後一個參數,也不能重新分配引用參數。 Java是通過價值傳遞的。 – duffymo

0

其實TempArrayarray是兩個referances到相同的位置在內存中,所以要修改的TempArray當你修改array

所以,你需要創建一個新的數組一樣,u可以使用:

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

然後修改陣列和另一個陣列將ñ不變。