| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 651 人关注过本帖
标题:关于clone()方法的两个问题
只看楼主 加入收藏
独孤客
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-5-1
收藏
 问题点数:0 回复次数:6 
关于clone()方法的两个问题
public class TestClone implements Cloneable
{
int count;
TestClone next;
public TestClone(int count)
{
this.count=count;
if(count>0)
next=new TestClone(count-1);
}
void add()
{
count++;
if(next!=null)
next.count++;
}
public String toString()
{
String s=String.valueOf(count)+" ";
if(next!=null)
s+=next.toString();
return s;
}
public Object clone()
{
Object o=null;
//如果没有实现cloneable,将会抛出CloneNotSupported异常
try
{
o=super.clone();
}
catch(CloneNotSupportedException e)
{
System.err.println("cannot clone");
}
return o;
}
public static void main(String[] args)
{
TestClone c=new TestClone(5);
System.out.println("c="+c);
TestClone c1=(TestClone)c.clone();
System.out.println("c1="+c1);
c.add();
System.out.println("after added\nc="+c+"\nc1="+c1);
}
}
其中TestClone c1=(TestClone)c.clone();是什么意思?
还有执行c.add()语句后,为什么输出的是c=6 5 3 2 1 c1=5 5 3 2 1?
搜索更多相关主题的帖子: clone 
2006-11-02 21:19
独孤客
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-5-1
收藏
得分:0 
还忘了一个。在TestClone c1=(TestClone)c.clone();
语句后加上c1.next=(TestClone)c.clone();输出……c1=5 5 4 3 2 1 0 affter added ……c1=6 5 5 3 2 1 0
这多出来的5是哪来的。c1.next又是什么意思?

乘天地之正,御六气之辩,以游于无穷,是为逍遥!!!
2006-11-02 21:27
seablue1023
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2006-5-26
收藏
得分:0 
还忘了一个。在TestClone c1=(TestClone)c.clone();表示 c1是c 的拷贝。

2006-11-02 21:38
独孤客
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-5-1
收藏
得分:0 
请教几个比较白痴的问题!
(1)next.count=4 3 2 1 0在执行了
if(next!=null)
next.count++
代码之后,为什么next.count不是等于5 4 3 2 1?

(2)执行c.add()后,为什么只有c1.next.count自加了,而c1.count却没自加?

乘天地之正,御六气之辩,以游于无穷,是为逍遥!!!
2006-12-04 23:22
angeloc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:36
帖 子:1353
专家分:0
注 册:2006-11-21
收藏
得分:0 
TestClone c=new TestClone(5);
这时候C是5 4 3 2 1 0
System.out.println("c="+c);
TestClone c1=(TestClone)c.clone();
这时候C1是和C一样5 4 3 2 1 0
System.out.println("c1="+c1);
c.add();
c.add()后变为6 5 3 2 1 0你应该没疑问吧?
这时候因为c1没有add(),c1是c的copy,所以c1没变,但为什么显示为5 5 3 2 1 0呢?
是因为第一个5是C1本身所以没变,第二个5却是和c里面第二个5是同一个引用,所以在c.add()时候
就发生了改变。
你可以对程序做如下改动来帮你理解这个问题:
public String toString()
{
String s=String.valueOf(count)+"("+this.hashCode()+") ";
if(next!=null)
s+=next.toString();
return s;
}
其他不变。



老牛明知夕阳晚,不用扬鞭自奋蹄; Angelo\'s BLOG
2006-12-05 10:52
阴阳妖瞳
Rank: 1
等 级:新手上路
帖 子:210
专家分:0
注 册:2006-12-5
收藏
得分:0 
关键在这一点
System.out.println( c.next==c1.next ); // output true

一身转战三千里,一剑曾挡百万师
2006-12-05 11:29
独孤客
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-5-1
收藏
得分:0 
明白了,谢谢!

乘天地之正,御六气之辩,以游于无穷,是为逍遥!!!
2006-12-22 22:42
快速回复:关于clone()方法的两个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016963 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved