当前位置: 技术问答>java相关
请教Clone问题!
来源: 互联网 发布时间:2015-03-21
本文导语: 书上说clone 方法创建调用它的对象的一个复制副本! 如果副本改变了引应用对象的内容!对应的源对象也被改变! 但是我试了试却没有改变啊! | clone 是一种shallow copy, 就是说对于基本对...
书上说clone 方法创建调用它的对象的一个复制副本!
如果副本改变了引应用对象的内容!对应的源对象也被改变!
但是我试了试却没有改变啊!
如果副本改变了引应用对象的内容!对应的源对象也被改变!
但是我试了试却没有改变啊!
|
clone 是一种shallow copy, 就是说对于基本对象它复制副本,如StringBuffer
你对它的副本操作不会影响源对象
而当clone复杂对象时,如 Vector时如果你改变副本的elements,那么源对象的elements也会改变
你对它的副本操作不会影响源对象
而当clone复杂对象时,如 Vector时如果你改变副本的elements,那么源对象的elements也会改变
|
class Father {
int age;
Son son;
}
class Son {
int age;
}
假设有:Father father = new Father();
当clone father时,产生副本father_1。
father_1.age是father.age的副本,它们存放在不同的内存区域。
father_1.son也是father.son的副本,但它们的内容都是指向同一Son对象的reference。
father_1.age改变时,不会影响father.age。
但father_1.son.age改变时,father.son.age当然也变了。
int age;
Son son;
}
class Son {
int age;
}
假设有:Father father = new Father();
当clone father时,产生副本father_1。
father_1.age是father.age的副本,它们存放在不同的内存区域。
father_1.son也是father.son的副本,但它们的内容都是指向同一Son对象的reference。
father_1.age改变时,不会影响father.age。
但father_1.son.age改变时,father.son.age当然也变了。
|
看看这里:
http://www.csdn.net/Expert/topic/418/418708.shtm
里面已经讨论很多了!!!
http://www.csdn.net/Expert/topic/418/418708.shtm
里面已经讨论很多了!!!
|
不能一概而论,要看类的Clone方法是怎么实现的
你可以在Clone中实现任意深度的复制。
Object类的clone()是field-for-field 复制,即引用变量将只复制变量本身而不复制其引用的对象。但是你可以覆盖Object类的clone()
如:
public T implements Cloneable{
Integer interger = new Integer(0);
public Object clone(){
T temp= new T();
temp.integer = this.integer.clone();
return temp;
}
}
你可以在Clone中实现任意深度的复制。
Object类的clone()是field-for-field 复制,即引用变量将只复制变量本身而不复制其引用的对象。但是你可以覆盖Object类的clone()
如:
public T implements Cloneable{
Integer interger = new Integer(0);
public Object clone(){
T temp= new T();
temp.integer = this.integer.clone();
return temp;
}
}