【问题标题】: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";
    }
}

【问题讨论】:

标签: 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";
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多