java(simple think in java)

tektekman 2013-02-05 01:41:11
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);
}
}
朋友们讲一下这个程序,小弟没有搞懂!
...全文
256 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengxu2011 2013-02-05
  • 打赏
  • 举报
回复
引用 3 楼 silenceburn 的回复:
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();
	}
xtfgy2012 2013-02-05
  • 打赏
  • 举报
回复
克隆分影子克隆和深克隆 你这是影子克隆,只克隆基础数据,引用类型不会被克隆 要想做的引用也克隆,需要做深克隆,楼上的就是深克隆。
silenceburn 2013-02-05
  • 打赏
  • 举报
回复
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;   
    }
chengxu2011 2013-02-05
  • 打赏
  • 举报
回复
粗略看了一下 讲浅克隆嘛
七神之光 2013-02-05
  • 打赏
  • 举报
回复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧