【问题标题】:would this be an example of deep copy?这会是深拷贝的一个例子吗?
【发布时间】:2017-07-01 00:16:09
【问题描述】:
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 但想保留它的原始值,以便以后可以使用它,我收到的提示是使用深拷贝。我不知道我的代码是否被视为深拷贝......

【问题讨论】:

  • 这是一个浅拷贝,但由于您使用的是基元而不是对象,所以您只需要一个浅拷贝(没有实际区别)。
  • 是的,如果可以编译,b 和 c 都将是 a 的深层副本。添加几个分号以使其编译。
  • @RudyVelthuis b = c = a;
  • @RudyVelthuis:那甚至不是副本。只有一个数组有多个引用。
  • 对另一个变量的赋值是引用的副本。这是尽可能肤浅的。

标签: java arrays deep-copy


【解决方案1】:

aint(s) 的数组,它们只有一个原始值 - 所以答案是肯定的。修改b(或c)不会影响a。但是,您可以使用 Arrays.copyOf(int[], int) 之类的

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

【讨论】:

    【解决方案2】:

    Deep copy 术语不能用于复制纯整数数组。这是关于更复杂的数据结构,例如也可以包含嵌套对象/集合的对象集合。

    【讨论】:

    • 也是深拷贝。浅拷贝只会复制引用:b = a; c = a;。没错,深拷贝通常也必须复制深嵌套的内容,但这里没有。
    猜你喜欢
    • 2013-03-14
    • 2013-03-09
    • 2012-01-30
    • 1970-01-01
    • 2012-04-13
    • 2013-10-04
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    相关资源
    最近更新 更多