Java中如何将一个数组复制到另一个数组。

本文描述了将一个数组值复制到另一个数组中的方法。

不要忘记在Java中数组是一个对象,这意味着管理值集合的数组变量是一个引用,一个指针,它包含数组第一个元素的地址。

Java中的数组浅拷贝

即使它看起来是值的成功复制(显示一个值证明了这一点),问题是通过两个引用之一的值的任何更改都在第二个引用可见。

// 使用第一个数组引用修改一个值

oldArray[0] = 100;

// 使用第二个引用打印第一个值

System.out.println(newArray[0]);    // 也是100

如果这种情况不是我们想要的,那将是一个很难管理的情况,因为它是一个逻辑错误,不会产生编译错误或者运行时错误。

我们所看到的被称为 浅拷贝,因为它只发生在参考层。
我们最感兴趣的是内容的拷贝—— 深度拷贝

Java数组不是这样复制的

所以必须知道: 数组的元素 不是这样复制的

// 初始化数组

int[] oldArray = {1,2,3,4,5};

//新数组

int[] newArray;

// 浅复制-复制引用值

newArray = oldArray;

// 使用第二个引用来打印一个值

// 打印值3

System.out.println(newArray[2]);

很少有情况需要这样的“复制”(浅复制),但大多数情况下这是一个错误。
最后,没有复制初始数组元素,但是在新引用 new array中复制了第一个引用值 oldArray

Java深度拷贝

在Java中,有两种可能将值从一个数组复制到另一个数组:

  1. 自己实现复制算法;

  2. 使用API函数。

对于第一种方法,复制意味着:

  1. 定义一个新数组;
  2. 为新数组分配空间;
  3. 从初始数组复制值:
// 初始化数组

int[] oldArray = {1,2,3,4,5};

//定义一个新的数组,并分配空间

int[] newArray = new int[oldArray.length];

// 复制值

for(int i =0;i < oldArray.length;i++)

    newArray[i] = oldArray[i];

第二种方法基于使用 system库中的 arraycopy函数:

  1. 定义一个新数组;
  2. 为新数组分配空间;
  3. 使用arraycopy复制数组的初始值:
// 初始化数组

int[] oldArray = {1,2,3,4,5};

//定义一个新的数组,并分配空间

int[] newArray = new int[oldArray.length];

// 复制值

System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);

日期:2019-04-29 03:17:55 来源:oir作者:oir