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

时间:2015-10-07 09:06:10

标签: 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; i < 3; i++) {
            proses(arrayCharacter);
        }
    }

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

1 个答案:

答案 0 :(得分: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";
    }