美食网站网页设计,学校官网在哪里找,筑业网,3g医院网站模板【0】README
0.1#xff09;本文旨在用源代码测试说明#xff0c; Object.clone 的 的克隆机制#xff08;深拷贝 还是 浅拷贝#xff09; 的问题#xff1b;
0.2#xff09;本文还添加了对System.arraycopy本地方法的测试#xff08;干货——推荐使用该方法进行数组复…【0】README
0.1本文旨在用源代码测试说明 Object.clone 的 的克隆机制深拷贝 还是 浅拷贝 的问题
0.2本文还添加了对System.arraycopy本地方法的测试干货——推荐使用该方法进行数组复制 【1】代码如下 public class Temp { public static void main(String[] args) {testClone();testClone_2();}public static void testClone() {double[] a {1, 2, 3};double[] b a.clone();b[0] 0;System.out.println(a[0]);//1}public static void testClone_2(){double[] a new double[3];double[] b;a[0] 1;b a.clone();b[0] 0;System.out.println(a[0]);//1}
}【2】测试结果
显然 clone的拷贝是深拷贝因为我在修改数组b时数组a中的相应元素没有被改变。。当然其他书也有例子说 clone是 浅拷贝仅在本例而言他是深拷贝 【3】不规则数组copy public static void main(String[] args) {double[][] array {{1,2,3},{2,2,2},{3,3,3}};double[][] backup new double[array.length][];int[] begin {1, 2, 3};//起始下标int single_len 0;for (int i 0; i backup.length; i) {single_len array[i].length - begin[i] 1;backup[i] new double[single_len];
// System.arraycopy(src, srcPos, dest, destPos, length);System.arraycopy(array[i], begin[i]-1, backup[i], 0, single_len);} }打印结果 1.00 2.00 3.002.00 2.003.00【4】System.arraycopy本地方法
4.1二维数组的copy干货——循环使用 System.arraycopy 对二维数组的单个一维数组进行copy不能将二维数组的引用传入到System.arraycopy不然copy结果还只是 引用间的copy public static void main(String[] args) {double[][] temp {{1,2,3}, {2,3,1}};double[][] a;a Arrays.copyOf(temp, temp.length);temp[0][0] -1;System.out.println(\n first output a array );AlgTools.printArray(a);a[0][0] -2;System.out.println(\n second output temp array );AlgTools.printArray(temp);double[][] b new double[temp.length][temp[0].length];for (int i 0; i temp.length; i) {System.arraycopy(temp[i], 0, b[i], 0, temp[i].length);}temp[0][0] -4;System.out.println(\n third output b array );AlgTools.printArray(b);b[0][0] -5;System.out.println(\n fourth output temp array );AlgTools.printArray(temp);}
//打印结果
first output a array -1.00 2.00 3.002.00 3.00 1.00second output temp array -2.00 2.00 3.002.00 3.00 1.00third output b array -2.00 2.00 3.002.00 3.00 1.00fourth output temp array -4.00 2.00 3.002.00 3.00 1.004.2一维数组的copy
从以上代码我们可知System.arraycopy 对一维数组的 copy 就是值对值的copy而不是引用对引用的copy