我想複製一個數組。通常,我會做這樣的事情。這些在Java中複製數組的方法有什麼區別?
int[] a1 = {1, 2, 3};
int[] a2 = a1
然而最近,我看到了我的教授做這種方式:
int[] ar1 = {1, 2, 3};
int[] ar2 = Arrays.copyOf(ar1);
有沒有做它比其他的一種方式之間的優勢呢?主要區別是什麼?
我想複製一個數組。通常,我會做這樣的事情。這些在Java中複製數組的方法有什麼區別?
int[] a1 = {1, 2, 3};
int[] a2 = a1
然而最近,我看到了我的教授做這種方式:
int[] ar1 = {1, 2, 3};
int[] ar2 = Arrays.copyOf(ar1);
有沒有做它比其他的一種方式之間的優勢呢?主要區別是什麼?
在第一種情況下,兩個數組都指向同一個對象。所以修改一個也會修改另一個。
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?
瞭解,謝謝! –
@OmarN http://stackoverflow.com/questions/869033/how-do-i-copy-an-object-in-java的第二個答案提供了更多關於在Java中複製的詳細信息,如果你感興趣的話:) – tixopi
我@ tixpoi的帖子完全一致,但我認爲這是添加,即在正確的地方你的第一個例子叫做淺拷貝和「真拷貝」被稱爲深拷貝。
謝謝你的信息!我是Java新手,不知道。 –
爲什麼投票表決? –
自己測試它相當容易。我猜想倒票來自於此。您可以使用[Arrays.copyof](http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOf(int [],%20int))作爲您的參考例。 – Emz