2017-07-01 29 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;'。你是对的,深层副本通常也必须复制深层嵌套的内容,但这里没有任何内容。 –