- 結論:
A.一維數組:深克隆(重新分配空間,並將元素復制過去)
對clone后的數組進行修改不會影響源數組。
B.二維數組:淺克隆(只傳遞引用)
對clone后的數組進行修改時,將對源數組也產生影響(因為復制的是引用,實際上指向的是同一個地址)
- 請看事實證明:
int[] a={3,1,4,2,5}; int[] b=a.clone(); b[0]=10; System.out.println(b[0]+" "+a[0]); 輸出為10 3 可見改變了b的值,但是沒有改變a的元素的值 int[][] a={{3,1,4,2,5},{4,2}}; int[][] b=a.clone(); b[0][0]=10; System.out.println(b[0][0]+" "+a[0][0]); 輸出為10 10 int[][] a={{3,1,4,2,5},{4,2}}; int[][] b=a.clone(); b[0][0]=10; System.out.println(b[0][0]+" "+a[0][0]); System.out.println(a[0]==b[0]); 第5句輸出為true。
- 如何實現二維數組的深克隆呢?
對每個一維數組調用clone方法。
int[][] a={{3,1,4,2,5},{4,2}}; int[][] b=new int[a.length][]; for(int i=0;i<a.length;i++){ b[i]=a[i].clone(); } b[0][0]=10; System.out.println(b[0][0]+" "+a[0][0]); System.out.println(b[0]==a[0]); 輸出為 10 3 false
————————————————
原文鏈接:https://blog.csdn.net/diyinqian/article/details/83279457