2015-10-07 90 views
0

在我替換函數中的數組的索引0後,arrayCharacter的值也會更改。其結果是替換數組項,源值也被替換爲public static void

[A, B, C] [ko, B, C] [ko, B, C] 

我不明白爲什麼結果不是:

[A, B, C] [A, B, C] [A, B, C] 

這是我的代碼:

public static void main(String[] args) { 
     String[] arrayCharacter = new String[]{"A", "B", "C"}; 
     for (int i = 0; i < 3; i++) { 
      proses(arrayCharacter); 
     } 
    } 

    public static void proses(String[] arrayCharacter) { 
     String[] characterTemp = arrayCharacter; 
     System.out.println(Arrays.toString(arrayCharacter)); 
     characterTemp[0] = "ko"; 
    } 
} 
+2

參見:[?是按值在Java中通過或經過的參考陣列(http://stackoverflow.com/questions/12757841/are-arrays-passed-by-value -or-通過按引用-在-java的)。 – agold

回答

2

的問題是,在這一行:String[] characterTemp = arrayCharacter;你不是複製數組,而是您有characterTemparrayCharacter指向相同的內存位置。因此,對一個人所做的任何改變都會反映到另一個人身上。

解決方法是複製源數組的內容。 System.arrayCopy會替你:

public static void proses(String[] arrayCharacter) { 
     String[] characterTemp = new String[arrayCharacter.length]; 
     System.arrayCopy(arrayCharacter, 0, characterTemp, 0, characterTemp.length); //This will create a separate copy of the array. 
     System.out.println(Arrays.toString(arrayCharacter)); 
     characterTemp[0] = "ko"; 
    }