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

前端之家收集整理的这篇文章主要介绍了java – System.arrayCopy()复制对象或引用对象?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个最后的类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,对吗?为什么会改变?

解决方法

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

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

原文链接:https://www.f2er.com/java/121906.html

猜你在找的Java相关文章