美文网首页
java数组的clone()方法是深克隆还是浅克隆?

java数组的clone()方法是深克隆还是浅克隆?

作者: 小小的coder | 来源:发表于2020-04-16 15:06 被阅读0次

结论:
一维数组:深克隆;(重新分配空间,并将元素复制过去)
二维数组:浅克隆。(只传递引用)
用事实suo话:

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

相关文章

网友评论

      本文标题:java数组的clone()方法是深克隆还是浅克隆?

      本文链接:https://www.haomeiwen.com/subject/ndwtmhtx.html