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

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 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果