这些在Java中复制数组的方法有什么不同?

时间:2015-11-15 01:07:10

标签: java arrays

我想复制一个数组。通常,我会做这样的事情。

int[] a1 = {1, 2, 3};
int[] a2 = a1

最近,我看到我的教授这样做了:

int[] ar1 = {1, 2, 3};
int[] ar2 = Arrays.copyOf(ar1);

在单向另一种方式之间有优势吗?主要区别是什么?

2 个答案:

答案 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拷贝"被称为深层复制