Java 替换数组项,在公共静态void上也替换了源值
在函数中替换数组的索引0后,Java 替换数组项,在公共静态void上也替换了源值,java,Java,在函数中替换数组的索引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
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";
}
}
publicstaticvoidmain(字符串[]args){
String[]arrayCharacter=新字符串[]{“A”、“B”、“C”};
对于(int i=0;i<3;i++){
散文(数组字符);
}
}
公共静态void散文(字符串[]数组字符){
字符串[]characterTemp=arrayCharacter;
System.out.println(Arrays.toString(arrayCharacter));
characterTemp[0]=“ko”;
}
}
问题在于这一行:String[]characterTemp=arrayCharacter
您没有复制数组,而是将characterTemp
和arrayCharacter
指向同一内存位置。因此,对其中一个所做的任何更改都将反映到另一个
解决方案是复制源数组的内容。这对你有好处吗
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";
}
请参阅:。