替换数组项,源值也在公共静态无效[重复]上被替换

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; 不是在复制数组,而是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";
    

【讨论】:

以上是关于替换数组项,源值也在公共静态无效[重复]上被替换的主要内容,如果未能解决你的问题,请参考以下文章

替换 2D numpy 数组中的连续重复项

查找重复项并将其替换为具有相同索引位置的新数组

替换python中重复项列表中的一个特定重复项

如何批量替换Excel中的重复项?

用另一个不改变状态的数组项替换数组项

mmap local v/s nfs file:当底层文件在磁盘上被替换时会发生啥?