我想复制一个数组。通常,我会做这样的事情。
int[] a1 = {1, 2, 3};
int[] a2 = a1
最近,我看到我的教授这样做了:
int[] ar1 = {1, 2, 3};
int[] ar2 = Arrays.copyOf(ar1);
在单向另一种方式之间有优势吗?主要区别是什么?
答案 0 :(得分:5)
在第一种情况下,两个数组都指向同一个对象。所以修改一个也会修改另一个。
int[] a1 = {1, 2, 3};
int[] a2 = a1
a1[0] = 15;
System.out.println(a2[0]); //15
在第二种情况下,会创建一个真实副本,因此修改一个副本不会影响另一个副本。
int[] a1 = {1, 2, 3};
int[] a2 = Arrays.copyOf(a1, 3);
a1[0] = 15;
System.out.println(a2[0]); //1
如果您想了解有关使用Java进行复制的详细信息,请参阅How do I copy an object in Java?的第二个答案
答案 1 :(得分:2)
我完全同意@ tixpoi的帖子,但我认为这是正确的添加地点,你的第一个例子叫做浅拷贝,而且#34; true拷贝"被称为深层复制。