gpt4 book ai didi

java - super.clone() 查询?

转载 作者:行者123 更新时间:2023-12-02 08:02:47 25 4
gpt4 key购买 nike

请澄清我以下问题。

  1. super.clone() 执行深复制还是浅复制?
  2. 在下面的示例中,为什么我们不需要类 CompositeObjCloneMe 作为可克隆类?尝试克隆 CloneMe 对象时,cObj 是否不会被克隆?注意:即使将 CompositeObjCloneMe 设置为可克隆也不会对输出产生任何影响。
  3. 由于程序正在设置类的原始值(setCObjValue = 100),为什么输出的行为类似于浅复制(而不是深复制)? (原始字段被深度复制)
  4. 不可变对象(immutable对象)&&基元本质上是深度复制的吗?

    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

最佳答案

1) javadoc救援:

[...] Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation.

2) 因为clone不会递归调用clone。这是一个浅克隆。它只是创建一个与原始对象具有相同引用的新对象以及原始字段的副本。

3) 我不明白你的意思。原语没有被深度复制。它们没有引用任何内容,因此没有什么值得复制的。

关于java - super.clone() 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8655375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com