以前只是知道System里面有一个native静态方法叫做arraycopy()。这个方法可以用来进行数组复制吗,今天用到了,感觉得把他的参数说明记个笔记,主要是为了方便自己查阅,大佬可忽略。
上代码:
public static void main(String[] args) {
double[] arr1= {1,3};
double[] arr2= {1,4};
double[] sum=new double[arr1.length+arr2.length];
/**
* 第一个参数是被copy的数组
* 第二个参数从被copy的数组的什么位置开始复制,这里是0所以是从第一个元素开始复制
* 第三个参数是结果数组
* 第四个参数是从结果数组的什么位置开始接收
* 第五个参数是需要复制的长度,这里是arr1.length,也就是把arr1全部复制到sum中
*/
System.arraycopy(arr1,0,sum,0,arr1.length);
System.arraycopy(arr2,0,sum,arr1.length,arr2.length);
for (double d : sum) {
System.out.println(d);
}
}
运行结果如下:
注意:
对于一维数组来说,arraycopy复制属性值传递,修改副本 不会影响原来的值,也就是深拷贝。
对于多维数组或者存放对象的一维数组,复制结果是:一维的引用变量 传递给 副本的一维数组。修改副本时,会影响原来的数组,也就是浅拷贝
来验证一下:
是一维数数组时,先进行arraycopy,然后修改副本数组的元素,代码如下:
public static void main(String[] args) {
double[] arr1= {1,3};
double[] arr2= {1,4};
double[] sum=new double[arr1.length+arr2.length];
System.arraycopy(arr1,0,sum,0,arr1.length);
System.arraycopy(arr2,0,sum,arr1.length,arr2.length);
//修改sum中位置为0和2的元素的值
sum[0]=99;
sum[2]=99;
System.out.println("arr1:");
for (double d : arr1) {
System.out.println(d);
}
System.out.println("arr2:");
for (double d : arr2) {
System.out.println(d);
}
System.out.println("sum:");
for (double d : sum) {
System.out.println(d);
}
}
运行结果:
可以看到,修改副本数组并不会对原数组造成影响
那如果是多维数组或者元素为对象的一维数组会怎么样呢,来试试
代码如下:
public static void main(String[] args) {
int[] a={1,2,3};
int[] b={4,5,6};
int[][] sum= {a,b};
int[][] copy= new int[2][3];
System.arraycopy(sum,0,copy,0,sum.length);
// for (int i = 0; i < copy.length; i++) {
// for (int x : copy[i]) {
// System.out.print(x);
// }
// System.out.println("");
// }
//修改副本数组
copy[0][0]=1;
copy[0][1]=1;
copy[0][2]=1;
//查看原数组是否发生改变
for (int i : a) {
System.out.println(i);
}
}
结果吐下:
可以看到,原数组a的值被改变了。