Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换数组项,在公共静态void上也替换了源值_Java - Fatal编程技术网

Java 替换数组项,在公共静态void上也替换了源值

Java 替换数组项,在公共静态void上也替换了源值,java,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

在函数中替换数组的索引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";
    }
}
publicstaticvoidmain(字符串[]args){
String[]arrayCharacter=新字符串[]{“A”、“B”、“C”};
对于(int i=0;i<3;i++){
散文(数组字符);
}
}
公共静态void散文(字符串[]数组字符){
字符串[]characterTemp=arrayCharacter;
System.out.println(Arrays.toString(arrayCharacter));
characterTemp[0]=“ko”;
}
}

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

解决方案是复制源数组的内容。这对你有好处吗

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";
    }
请参阅:。