Java中如何将一个数组复制到另一个数组。
时间:2019-04-29 03:17:55 来源:igfitidea点击:
本文描述了将一个数组值复制到另一个数组中的方法。
不要忘记在Java中数组是一个对象,这意味着管理值集合的数组变量是一个引用,一个指针,它包含数组第一个元素的地址。
Java数组不是这样复制的
所以必须知道: 数组的元素 不是这样复制的:
// 初始化数组 int[] oldArray = {1,2,3,4,5}; //新数组 int[] newArray; // 浅复制-复制引用值 newArray = oldArray; // 使用第二个引用来打印一个值 // 打印值3 System.out.println(newArray[2]);
很少有情况需要这样的“复制”(浅复制),但大多数情况下这是一个错误。
最后,没有复制初始数组元素,但是在新引用 new array中复制了第一个引用值 oldArray。
Java中的数组浅拷贝
即使它看起来是值的成功复制(显示一个值证明了这一点),问题是通过两个引用之一的值的任何更改都在第二个引用可见。
// 使用第一个数组引用修改一个值 oldArray[0] = 100; // 使用第二个引用打印第一个值 System.out.println(newArray[0]); // 也是100
如果这种情况不是我们想要的,那将是一个很难管理的情况,因为它是一个逻辑错误,不会产生编译错误或者运行时错误。
我们所看到的被称为 浅拷贝,因为它只发生在参考层。
我们最感兴趣的是内容的拷贝—— 深度拷贝。
Java深度拷贝
在Java中,有两种可能将值从一个数组复制到另一个数组:
自己实现复制算法;
使用API函数。
对于第一种方法,复制意味着:
- 定义一个新数组;
- 为新数组分配空间;
- 从初始数组复制值:
// 初始化数组 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函数:
- 定义一个新数组;
- 为新数组分配空间;
- 使用arraycopy复制数组的初始值:
// 初始化数组 int[] oldArray = {1,2,3,4,5}; //定义一个新的数组,并分配空间 int[] newArray = new int[oldArray.length]; // 复制值 System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);