日期:2014-05-20  浏览次数:20827 次

java(simple think in java)
public class Snake implements Cloneable{
private Snake next;
private char c;
Snake(int i, char x){
c = x;
if (--i > 0)
next = new Snake(i, (char)(x + 1));
}
void increment(){
c++;
if (next != null)
next.increment();
}
public String toString(){
String s = ":" + c;
if (next != null)
s += next.toString();
return s;
}
public Object clone(){
Object o = null;
try{
o = super.clone();
}catch(CloneNotSupportedException e){}
return o;
}
public static void main(String[] args){
Snake s = new Snake(5, 'a');
System.out.println("s = "+s);
Snake s2 = (Snake)s.clone();
System.out.println("s2 = "+s2);
s.increment();
System.out.println("after s.increment, s2 = " +s2);
}
}
朋友们讲一下这个程序,小弟没有搞懂!

------解决方案--------------------
java.lang.object的clone()是浅拷贝
要深拷贝需要自己写

把clone写成下面这样就深拷贝了:
public Object clone(){
    Object o = null;
    try{
    o = super.clone();  
    if (this.next != null){
    ((Snake)o).next = (Snake)this.next.clone();}    }catch(CloneNotSupportedException e){}
    return o;   
    }

------解决方案--------------------
引用:
java.lang.object的clone()是浅拷贝
要深拷贝需要自己写

把clone写成下面这样就深拷贝了:


Java code
?



12345678

public Object clone(){     Object o = null;     try{     o = super.clone();       if (this.next != nu……


你的深克隆是可以,可是当有N多个引用类型就不好了 代码要写很多 我介绍一个简单的深克隆啊:
	public Object deepClone() throws Exception
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);

ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}