gpt4 book ai didi

java - 替换数组项,源值在 public static void 上也被替换

转载 作者:行者123 更新时间:2023-11-30 03:14:20 25 4
gpt4 key购买 nike

当我在函数中替换数组的索引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";
}
}

最佳答案

问题在于,在这一行中:String[] characterTemp = arrayCharacter;您没有复制数组,而是有characterTemparrayCharacter 指向相同的内存位置。因此,对其中一个所做的任何更改都会反射(reflect)到另一个。

解决办法是复制源数组的内容。 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";
}

关于java - 替换数组项,源值在 public static void 上也被替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32988118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com