当前位置: 技术问答>java相关
关于Clone的问题。
来源: 互联网 发布时间:2015-02-10
本文导语: 有对象 A a = new A(); 但是A 并没有继承Cloneable. Vector aVec = new Vector(); aVec.add(a); Vector theVec = aVec.clone; 那这时theVec中放的是不是对象a呢? | 很遗憾,这么做只是对aVec的一个浅克隆,它不会...
有对象
A a = new A();
但是A 并没有继承Cloneable.
Vector aVec = new Vector();
aVec.add(a);
Vector theVec = aVec.clone;
那这时theVec中放的是不是对象a呢?
A a = new A();
但是A 并没有继承Cloneable.
Vector aVec = new Vector();
aVec.add(a);
Vector theVec = aVec.clone;
那这时theVec中放的是不是对象a呢?
|
很遗憾,这么做只是对aVec的一个浅克隆,它不会尝试对a进行克隆.
所以放的还是a,而且是同一个对象a.
我想这可能不是你需要的.
所以放的还是a,而且是同一个对象a.
我想这可能不是你需要的.
|
是对象a,theVec只复制了引用
|
下面是小衲从java.util.Vector.java中摘出来的关于clone()的部分:
public synchronized Object clone() {
try {
Vector v = (Vector)super.clone();
v.elementData = new Object[elementCount];
System.arraycopy(elementData, 0, v.elementData, 0, elementCount);
v.modCount = 0;
return v;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}
可以看出,真正的clone工作是由 System.arraycopy(...)做的,
但正如各位大侠施主所说,这是一个浅clone,只复制了reference
public synchronized Object clone() {
try {
Vector v = (Vector)super.clone();
v.elementData = new Object[elementCount];
System.arraycopy(elementData, 0, v.elementData, 0, elementCount);
v.modCount = 0;
return v;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}
可以看出,真正的clone工作是由 System.arraycopy(...)做的,
但正如各位大侠施主所说,这是一个浅clone,只复制了reference
|
对,这是一个浅clone,如果要达到完全clone的目的,必须自己实现clone.