java – System.arrayCopy()复制对象或引用对象?
发布时间:2020-12-14 05:39:40 所属栏目:Java 来源:网络整理
导读:我有一个最后的类NameAndValue.我使用System.arrayCopy()复制了一个NameAndValue对象数组,当我更改了复制数组中的NameAndValue对象时,它反映在原始数组中. public final class NameAndValue{ public String name; public String value; public NameAndValue(
我有一个最后的类NameAndValue.我使用System.arrayCopy()复制了一个NameAndValue对象数组,当我更改了复制数组中的NameAndValue对象时,它反映在原始数组中.
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,nv2,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,nv3,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,对吗?为什么会改变? 解决方法
参考,这是一个浅的副本.令人惊讶的是,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 每个数组元素就像上面的nv1和nv2 vars.正如nv1和nv2引用(指向)相同的底层对象,数组条目也是如此,包括当这些条目从一个数组复制到另一个数组时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |