public class ArrayTssst {public static void main(String[] args){// int[] a = new int[]{1,15,3};/*int[] b = a;System.out.println(b[1]);*//* int[] b = new int[3];System.arraycopy(a, 0, b, 0, a.length); b[1] =55;for(int i=0;i<a.length;i++){System.out.println(a[i]);}*/Poin[] p1 = new Poin[]{new Poin(1,1),new Poin(2,2),new Poin(3,3)};Poin[] p2 = new Poin[3];/*System.arraycopy(p1, 0, p2, 0, p1.length);p2[2].x = 44;p2[2].y = 33;for(int i=0;i<p1.length;i++){System.out.println(p1[i]);}*/p2 = p1.clone();p2[2].x = 44;p2[2].y = 33;for(int i=0;i<p1.length;i++){System.out.println(p1[i]);}}}class Poin implements Cloneable{int x;int y;Poin(int x,int y){this.x = x;this.y = y;}public String toString(){return "x = "+x+", y = "+y;}public Object clone(){Object o=null;try {o = super.clone();} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}return o;}}
2 回答
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
克隆分为浅克隆和深克隆,如果直接使用继承Object的克隆,则为浅克隆。
你想达到的效果是深克隆,如果你想实现深克隆,则需要重写clone方法
打个比方来讲深克隆和浅克隆。就用一筐苹果来讲,深克隆就是我们复杂了一筐苹果(一个筐和筐里的苹果),而浅克隆则只是复杂了一个筐,苹果则不能直接的反应在筐里。这个列子不是很恰当,不过你可以这么去理解深克隆和浅克隆。
慕码人8056858
TA贡献1803条经验 获得超6个赞
对于数组这样的集合,如果要克隆的话,需要遍历里面的元素逐一克隆,这个是深克隆。还有一个方法就是用ObjectOutputStream 和ObjectInputStream也可以用来进行深克隆。
添加回答
举报
0/150
提交
取消