猿问

我的clone()方法怎么不好使啊?求高手指点一下哈

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 block
e.printStackTrace();
}

return o;
}
}

MYYA
浏览 113回答 2
2回答

摇曳的蔷薇

克隆分为浅克隆和深克隆,如果直接使用继承Object的克隆,则为浅克隆。你想达到的效果是深克隆,如果你想实现深克隆,则需要重写clone方法打个比方来讲深克隆和浅克隆。就用一筐苹果来讲,深克隆就是我们复杂了一筐苹果(一个筐和筐里的苹果),而浅克隆则只是复杂了一个筐,苹果则不能直接的反应在筐里。这个列子不是很恰当,不过你可以这么去理解深克隆和浅克隆。

慕码人8056858

对于数组这样的集合,如果要克隆的话,需要遍历里面的元素逐一克隆,这个是深克隆。还有一个方法就是用ObjectOutputStream 和ObjectInputStream也可以用来进行深克隆。
随时随地看视频慕课网APP

相关分类

Java
我要回答