浅拷贝和深拷贝,浅克隆和深克隆在绝大多数情况下是同一概念。
浅克隆和浅拷贝都指的是对象的浅复制操作,只复制对象的引用而不复制内部包含的其他对象。
产生的各种误解多是对数据存储区域的划分和国内教材对指针和引用这里垃圾概念的提出。
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;
*/
}
}