替换数组项,源值也在公共静态无效[重复]上被替换
Posted
技术标签:
【中文标题】替换数组项,源值也在公共静态无效[重复]上被替换【英文标题】:replace array item, source value is replaced too on public static void [duplicate] 【发布时间】:2016-01-04 10:36:50 【问题描述】:我在函数中替换了一个数组的索引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";
【问题讨论】:
见:Are arrays passed by value or passed by reference in Java?。 【参考方案1】:问题在于,在这一行中: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";
【讨论】:
以上是关于替换数组项,源值也在公共静态无效[重复]上被替换的主要内容,如果未能解决你的问题,请参考以下文章