【发布时间】:2011-12-28 11:34:18
【问题描述】:
请澄清以下问题。
-
super.clone()是执行深拷贝还是浅拷贝? - 在下面的例子中,为什么我们不需要类
CompositeObjCloneMe作为可克隆的?尝试克隆CloneMe对象时不会克隆cObj吗? 注意:即使将CompositeObjCloneMe设为可克隆也不会对输出产生任何影响。 - 由于程序正在设置类的原始值(
setCObjValue = 100),为什么输出的行为类似于浅拷贝(不是深拷贝)? (原始字段被深度复制) -
不可变对象&&原语本质上是被深度复制的吗?
class CloneMe implements Cloneable { private CompositeObjCloneMe cObj; public CloneMe() { cObj = new CompositeObjCloneMe(); } public void setCObjValue(int myOwnDt) { this.cObj.setObj(myOwnDt); } public int getCObjValue() { return this.cObj.getObj(); } //Clone public Object clone() throws CloneNotSupportedException { return super.clone(); } } class CompositeObjCloneMe {//implements Cloneable{ private int value = 20; public void setObj(int i){ value = i; } public int getObj(){ return value; } // public Object clone() throws CloneNotSupportedException{ // return super.clone(); // } } public class CloneTest { public static void main(String arg[]) { CloneMe realObj = new CloneMe(); try { CloneMe cloneObj = (CloneMe) realObj.clone(); realObj.setCObjValue(100); System.out.println(realObj.getCObjValue() + " " + cloneObj.getCObjValue()); } catch (CloneNotSupportedException cnse) { System.out.println("Cloneable should be implemented. " + cnse); } } }
输出:100 100
【问题讨论】:
标签: java