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

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
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作