前言
Java中一维数组的复制有两种方法,分别是数组引用的复制与数组的复制。在开发中,需要额外注意,两种方法的异同在下文中介绍。
一、数组引用的复制
数组的类型属于引用类型,即定义的数组型变量是一个数组的引用。顾名思义,数组引用的复制是指数组在复制后,共用一个地址值。先看一个例子。
int[] srcAry = { 1, 2, 3, 4, 5};
int[] cpyAry = srcAry; //数组引用复制
//修改副本中的值,输出原数组中的所有值
cpyAry[1] = 10;
for(int v:srcAry){
System.out.printf("%d ", v);
}
System.out.println();
//修改原数组中的值,输出副本的所有值
srcAry[0] = 0;
for(int v:cpyAry){
System.out.printf("%d ", v);
}
输出结果:
所以直接通过赋值的方式,是对数组引用的复制,一旦原数组或副本中的值被修改,则原数组与副本的值都会改变。
二、数组的复制
大多数时候,我们都更希望通过复制能够得到两个值相同,但互相独立的数组。就是下面的方法了。
1)arraycopy方法
int[] srcAry = { 1, 2, 3, 4, 5};
int[] cpyAry = new int[5];
System.arraycopy(srcAry, 0, cpyAry, 0, 5);
- 函数原型:
void System.arraycopy(object src, int srcPos, Object dest, int destPos, int length);
- 参数介绍:
- src:被复制的原数组;
- srcPos:原数组中的起始位置;
- dest:目标数组;
- destPos:目标数组的起始位置;
- length:复制的数组元素数目;
2)Arrays.copyOf方法
import java.util.Arrays; //需要引入util包中的Arrays类
int[] srcAry = { 1, 2, 3, 4, 5};
//完全复制 cpyAry = { 1, 2, 3, 4, 5}
int[] cpyAry = Arrays.copyOf(srcAry, 5);
//截取 cpyAry = { 1, 2, 3}
int[] cpyAry = Arrays.copyOf(srcAry, 3);
//扩充 cpyAry = { 1, 2, 3, 4, 5,0, 0}
int[] cpyAry = Arrays.copyOf(srcAry, 7);
- 函数原型:
int[] copyOf(int[] original, int newLength)
- 参数介绍:
- original:要复制的数组;
- newLength:要返回的副本的长度;
Arrays.copyOf方法有多个重载函数,更多可查看API文档。
3)for循环逐一复制方法
这个就不多讲了,顺带写在这,能用前两种就用前两种吧。