【发布时间】:2014-03-06 07:03:21
【问题描述】:
我正在学习深拷贝和浅拷贝。
如果我们有两个数组:
int[]arr1={1,2,3,4,5};
int[]arr2={1,2,3,4,5};
问题:两个数组都指向相同的引用[1][2][3][4][5]。
如果我更改 arr1[2] 会发生什么?它会更改 arr2[2] 吗?
当我们将一个数组(随机数组,不一定是arr1 或arr2)从main 传递到一个方法时,编译器会为该方法制作一个浅 数组副本,对吧?
如果 Java 编译器被重新编写以生成数组数据的深 副本并将其发送到方法。 主中的原始数组会发生什么?我认为原始数组可能会根据方法发生变化并传回主数组。我不确定。
【问题讨论】:
-
你试的结果如何?
-
不,它不会改变它。
-
两个数组不指向同一个东西。您初始化它们的方式,您创建了两个独立的数组,它们恰好以相同的内容开始。基元是值。
int[] arr1={1,2,3,4,5}; int[] arr2=arr1;可能会进行更有趣的实验。 -
想想
int i = 1,如果有人做i++,程序中使用的每一个1会变成2吗? -
提示:1) 使用类而不是原始类型进行测试。 2) 使用
Integer和String等不可变类和StringBuilder等可变类进行测试。
标签: java arrays deep-copy shallow-copy