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

pra*_*nth 9 java arrays 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("-----------------------");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到输出,

0
1
-----------------------
1
2
-----------------------
Run Code Online (Sandbox Code Playgroud)

在所有情况下,我的输出应该是25和26,对吧?为什么会改变?

T.J*_*der 20

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

参考,这是一个浅的副本.令人惊讶的是,文档没有明确地说明,只是隐含,因为它们讨论复制数组元素,而不是递归地复制它们引用的东西.

这与你有这个完全相同:

NameAndValue nv1 = new NameAndValue("A", "1");
NameAndValue nv2 = nv1;
nv2.value = "4";
System.out.println(nv1.value); // 4
Run Code Online (Sandbox Code Playgroud)

每个阵元是像nv1nv2上述瓦尔.正如nv1nv2引用(指向)相同的底层对象,所以做阵列条目,当那些条目从一个阵列复制到另一个包括.