剑非刀 2016-12-01 09:31 采纳率: 0%
浏览 5921

JAVA中的System.arraycopy 到底是深拷贝还是浅拷贝?

```public static void testSystemArraycopy2(){
Person[] arr1 = {new Person("A"),new Person("B"),new Person("C")};
Person[] arr2 = new Person[3];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
arr2[2].setName("CCCCC");

    for (int i = 0; i < arr2.length; i++) {
        System.out.print(arr2[i].getName() + " ");
    }

    System.out.println(arr1 == arr2);

    for (int i = 0; i < arr1.length; i++) {
        System.out.print(arr1[i].getName()  + " ");
    }
}

----->控制台:
A B CCCCC false
A B CCCCC
两个数组的地址是的确不等。(疑:如果数组比较地址也是用‘==’来比较的话)
如果是基本类型的数组,我做了实验,的确是深拷贝;但对于引用数组,当我用System.arraycopy拷贝之后,我改变新数组某一元素的属性,却发现旧数组对应元素的属性也发生了同样改变。
以上情况让我十分困惑,既然复制之后的数组的内存地址不同,那么我改变一个内存块中的信息就不会影响另一个内存块的信息,可是为什么它却随之改变呢?
所以就有了第一句的疑惑。恳请大神不吝指点。

  • 写回答

5条回答 默认 最新

  • threenewbee 2016-12-01 14:29
    关注

    相对于数组来说,是深拷贝,相对于数组中每个元素来说,是浅拷贝。

    评论

报告相同问题?