数据复制区分-7.26

浅拷贝和深拷贝,浅克隆和深克隆在绝大多数情况下是同一概念。

浅克隆和浅拷贝都指的是对象的浅复制操作,只复制对象的引用而不复制内部包含的其他对象。

产生的各种误解多是对数据存储区域的划分和国内教材对指针和引用这里垃圾概念的提出。

java中有基本数据类型和引用数据类型,基本数据类型存在栈区,我们要的也就是它的实际值,也就是这些简单变量的实际值。引用数据类型的值也是存在栈区,但是我们要的是这个值所指向的堆区的地址所存的值。

总结:浅克隆和深克隆,区分它们的是对于对象内部包含的其他对象的处理方式。浅克隆只是简单复制引用的值,深克隆会将引用所指向的对象也进行数据拷贝,新引用指向这个新的相同数据的对象。

忘掉指针和引用的概念吧,反正都是存值,无非就是布尔值,整型,浮点型,字符型,然后排列组合衍生出数组,链表,对象这些东西。简单的数据类型直接存在栈区,复杂点的数据类型,把实际的数据存在堆区,在栈区存地址来指向堆区的实际数据。

点击查看代码
public class Realizetype implements Cloneable{
    public Student s1;
    public Realizetype(){
        System.out.println("具体的原型模型对象构建完成");
        s1 = new Student();
        s1.setAge(12);
        s1.setName("tom");
    }

    @Override
    protected Realizetype clone() throws CloneNotSupportedException {
        System.out.println("具体原型复制成功");
        Realizetype clone =(Realizetype) super.clone();  //浅克隆
/*        //这里执行深克隆
        clone.s1 = new Student();
        clone.s1.setAge(this.s1.getAge());
        clone.s1.setName(this.s1.getName());
        return clone;
		*/
    }
}
举个抽象的例子:把爱因斯坦进行浅显的克隆/拷贝,只会造出一个和爱因斯坦肉体一模一样的人性生物,而如果是深克隆/拷贝(头脑中的知识思维),我们将得到无数个相互独立的爱因斯坦个体,每个人都是能发表相对论的存在!
posted @ 2023-07-26 15:47  小黑山羊  阅读(13)  评论(0)    收藏  举报