Object中的clone方法

9 阅读1分钟

Object中的clone方法

1、作用:赋值一个属性值一样的新对象
2、使用:
需要被克隆的对象实现Cloneable
重写clone方法

public class Person implements Cloneable {
  private String name;
  
  private int age;
  
  public Person() {
  }
  
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  
  public String getName() {
    return this.name
  }
  
  public String setName(String name) {
    this.name = name
  }
  
  public String getAge() {
    return this.age
  }
  
  public String setName(int age) {
    this.age = age
  }
  
  @Override
  public String toString() {
    return "Person{" +
           "name='" + name + '\" +
           ", age=" + age +
           '}';
  }
  
  @Override
  public boolean equal(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false
    Person person = (Person) o;
    return age = person.age && Objects.equals(name, person.name);
  }
  
  @Override
  protected Object clone() throws CloneNotSupportedException {
    return super.clone();
  }
}

implements Cloneable需要被克隆的对象实现Cloneable

第二步就是去重写克隆方法。

image.png

image.png

super.clone() 指向的是对象的clone,直接记住怎么用就可以了,它是克隆一个属性值一样的新对象。

新建Test03.java类文件:

public class Test03 {
  public static void main(String[] args) throws CloneNotSupportedException {
    Person p2 = new Person("涛哥", 16);
    Object o = p2.clone();
    Person p3 = (Person) o; // 克隆了一个新对象
    
    System.out.println(p2==p3); // 比较地址值
    System.out.println(p2.equals(p3)); // true 克隆的是值,不是地址值 
  }
}