System.arrayCopy()复制对象还是对对象的引用?
问题内容:
我正在上最后一堂课NameAndValue
。我复制的阵列NameAndValue
使用对象System.arrayCopy()
,并且当我改变一个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, 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()复制对象还是对对象的引用?
参考,这是一个 浅表
副本。出乎意料的是,文档没有明确地说,只是隐式地说,因为他们
只 谈论复制数组元素,而不是递归地复制他们引用的东西。
就像您有这个一样:
NameAndValue nv1 = new NameAndValue("A", "1");
NameAndValue nv2 = nv1;
nv2.value = "4";
System.out.println(nv1.value); // 4
每个数组元素都类似于上面的nv1
和nv2
vars。就像nv1
并nv2
引用(指向)相同的基础对象一样,数组条目也是如此,包括何时将这些条目从一个数组复制到另一个数组。