gpt4 book ai didi

java - System.arrayCopy() 复制对象或对对象的引用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:50 24 4
gpt4 key购买 nike

我有期末类(class) NameAndValue。我使用 System.arrayCopy() 复制了一组 NameAndValue 对象,当我更改复制数组中的 NameAndValue 对象时,它反射(reflect)在原始数组。

public final class NameAndValue {
public String name;
public String value;

public NameAndValue() { }

public NameAndValue(String name, String value) {
this.name = name;
this.value = value;
}
}
public class Main {
public static void main(String[] args) {
NameAndValue[] nv = new NameAndValue[4];
nv[0] = new NameAndValue("A", "1");
nv[1] = new NameAndValue("B", "2");
nv[2] = new NameAndValue("C", "3");
nv[3] = new NameAndValue("D", "4");

NameAndValue[] nv2 = new NameAndValue[4];
System.arraycopy(nv, 0, nv2, 0, 2);
nv2[2] = new NameAndValue("Y", "25");
nv2[3] = new NameAndValue("Z", "26");

for (int i = 0; i < 2; i++) {
NameAndValue[] nv3 = new NameAndValue[4];
System.arraycopy(nv2, 0, nv3, 0, 4);
nv3[2].value = String.valueOf(i);
nv3[3].value = String.valueOf(i + 1);

System.out.println(nv2[2].value);
System.out.println(nv2[3].value);
System.out.println("-----------------------");
}
}
}

我得到的输出是:

0
1
-----------------------
1
2
-----------------------

在所有情况下我都应该得到 25 和 26 的输出,对吗?为什么会变??

最佳答案

System.arrayCopy() copies object or reference to object?

引用,这是一个副本。令人惊讶的是,the docs don't say that explicitly ,就像他们谈论复制数组元素一样,而不是递归地复制他们引用的东西。

这和你有这个完全一样:

NameAndValue nv1 = new NameAndValue("A", "1");
NameAndValue nv2 = nv1;
nv2.value = "4";
System.out.println(nv1.value); // 4

每个数组元素就像上面的 nv1nv2 变量。正如 nv1nv2 引用(指向)相同的底层对象一样,数组条目也是如此,包括当这些条目从一个数组复制到另一个数组时。

关于java - System.arrayCopy() 复制对象或对对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15135104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com