Java 这是深度复制的一个例子吗? int[]a=新的int[10]; 对于(int i=0;i

Java 这是深度复制的一个例子吗? int[]a=新的int[10]; 对于(int i=0;i,java,arrays,deep-copy,Java,Arrays,Deep Copy,数组b和数组c都是数组a的深度副本吗? 我需要修改数组a,但希望保留其原始值,以便以后可以使用它,收到的提示是使用深度复制。我不知道我的代码是否被视为深度复制…a是一个int(s)数组,它们只有一个基本值-因此答案是肯定的。修改b(或c)不会影响a。但是,你可以像 深度复制术语无法应用于复制整数的普通数组。这是关于更复杂的数据结构,比如对象集合,也可以包含嵌套对象/集合。这是一个浅拷贝,但由于您使用的是原语而不是对象,所以您只需要一个浅拷贝(没有实际的区别)。是的,如果它要编译,b和c都将是a的

数组b和数组c都是数组a的深度副本吗?
我需要修改数组a,但希望保留其原始值,以便以后可以使用它,收到的提示是使用深度复制。我不知道我的代码是否被视为深度复制…

a
是一个
int
(s)数组,它们只有一个基本值-因此答案是肯定的。修改
b
(或
c
)不会影响
a
。但是,你可以像


深度复制
术语无法应用于复制整数的普通数组。这是关于更复杂的数据结构,比如对象集合,也可以包含嵌套对象/集合。

这是一个浅拷贝,但由于您使用的是原语而不是对象,所以您只需要一个浅拷贝(没有实际的区别)。是的,如果它要编译,b和c都将是a的深拷贝。添加几个分号使其可编译。@RudyVelthuis
b=c=a@RudyVelthuis:那甚至不是一份拷贝。只有一个数组具有多个引用。对另一个变量的赋值是引用的副本。这是最浅薄的,也是最深的复制品。浅层复制只会复制引用:
b=A;c=a。您是对的,深度副本通常也必须复制深度嵌套的内容,但这里没有。
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]
}
int[] b = Arrays.copyOf(a, a.length);
int[] c = Arrays.copyOf(a, a.length);