在我替换函数中数组的索引0后,arrayCharacter
的值也会更改。结果是
[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";
}
}
答案 0 :(得分:2)
问题在于,在这一行中:String[] characterTemp = arrayCharacter;
您没有复制数组,而是让characterTemp
和arrayCharacter
指向同一个内存位置。因此,对一个人所做的任何改变都会反映到另一个人身上。
解决方案是复制源数组的内容。 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";
}