8.4 复制数组

8.2 节中说过,数组变量包含指向数组的引用。给数组变量赋值时,只复制指向数组的引用,而不会复制数组本身!请看下面的示例:

  1. double[] a = new double[3];
  2. double[] b = a;

这些语句创建了一个包含 3 个元素的 double 数组,并让两个变量指向它,如图 8-3 所示。

{%}

图 8-3:显示两个变量指向同一个数组的状态图

通过其中任何一个变量修改数组都将影响另一个变量。例如,如果我们设置 a[0] = 17.0,再显示 b[0],结果将为 17.0。因为 ab 是表示同一样东西的不同名称,所以它们有时被称为别名(alias)。

如果要复制数组本身而不是指向它的引用,那么就必须创建一个新的数组,并将旧数组中的每个元素都复制到新数组中,如下所示:

  1. double[] b = new double[3];
  2. for (int i = 0; i < 3; i++) {
  3. b[i] = a[i];
  4. }

另一种选择是使用 java.util.Arrays,它提供了复制数组的方法 copyOf,可像下面这样调用这个方法:

  1. double[] b = Arrays.copyOf(a, 3);

其中的第二个参数用来指定要复制的元素个数,因此你也可以只复制数组的一部分。