克隆的实现方式:

1.实现Cloneable接口并重写Object类中的clone()方法;

package com.example.demo.ee.test;
public class User implements Cloneable{
   private String name;
   private Integer age;  
   public User(String name, Integer age) {
       super();
       this.name = name;
       this.age = age;
   }  public String getName() {
       return name;
   }  public void setName(String name) {
       this.name = name;
   }  public Integer getAge() {
       return age;
   }  public void setAge(Integer age) {
       this.age = age;
   }  @Override
   public Object clone() {
       Object o = null;
       try {
           //Object中的clone()识别出你要复制的是哪一个对象
           o = (User) super.clone();       
       } catch (CloneNotSupportedException e) {
           System.out.println(e.toString());
       }
       return o;
   }
 }


 

2. 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆,

 

深克隆(深复制):

被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。

浅克隆(浅复制):

被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。