2017-07-01 33 views
4
int[] a = new int[10]; 
for (int i = 0; i < 10; i++) { 
    a[i] = randomFill();//randomFill is a method that generates random numbers 
} 

int[] b = new int[a.length]; 
for (int j = 0; j < a.length; j++) { 
    b[j] = a[j] 
} 

int[] c = new int[a.length]; 
for(int k = 0; k < a.length; k++) { 
    c[k] = a[k] 
} 

都是數組b和數組c的數組a的深度副本? 我需要修改數組a,但希望保留其原始值,以便日後可以使用它,並且我收到的提示是使用深度複製。我不知道我的代碼是否被認爲是深拷貝...這是一個深拷貝的例子嗎?

+1

這是一個淺拷貝,但由於您使用的是基元而不是對象,所以您只需要淺拷貝(沒有實際差異)。 –

+0

是的,如果它能編譯,b和c都是a的深拷貝。添加幾個分號讓它編譯。 –

+0

@RudyVelthuis'b = c = a;' –

回答

3

a是一個int(s)的數組,它們只有一個原始值 - 所以答案是肯定的。修改b(或c)不會影響a。但是,你可以使用Arrays.copyOf(int[], int)

int[] b = Arrays.copyOf(a, a.length); 
int[] c = Arrays.copyOf(a, a.length); 
1

Deep copy詞語無法應用於拷貝整數的簡單數組。這是關於更復雜的數據結構,如可以包含嵌套對象/集合的對象集合。

+0

它也是一個很深的副本。淺拷貝只會複製引用:'b = a; c = a;'。你是對的,深層副本通常也必須複製深層嵌套的內容,但這裏沒有任何內容。 –