2015-11-15 20 views
0

我想複製一個數組。通常,我會做這樣的事情。這些在Java中複製數組的方法有什麼區別?

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

然而最近,我看到了我的教授做這種方式:

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

有沒有做它比其他的一種方式之間的優勢呢?主要區別是什麼?

+0

爲什麼投票表決? –

+0

自己測試它相當容易。我猜想倒票來自於此。您可以使用[Arrays.copyof](http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOf(int [],%20int))作爲您的參考例。 – Emz

回答

6

在第一種情況下,兩個數組都指向同一個對象。所以修改一個也會修改另一個。

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?

+0

瞭解,謝謝! –

+0

@OmarN http://stackoverflow.com/questions/869033/how-do-i-copy-an-object-in-java的第二個答案提供了更多關於在Java中複製的詳細信息,如果你感興趣的話:) – tixopi

2

我@ tixpoi的帖子完全一致,但我認爲這是添加,即在正確的地方你的第一個例子叫做淺拷貝和「真拷貝」被稱爲深拷貝

+0

謝謝你的信息!我是Java新手,不知道。 –