object.clone使用

2020-04-26  本文已影响0人  Android_冯星

如何使用

  1. 实现Cloneable接口
  2. 重写Object中clone方法,定位为public
  3. 调用super.clone();
    4.实现try catch 捕获异常

clone规则

  1. 基本类型
    如果变量是基本类型,克隆的是其值比如int、float等。

  2. 对象
    如果变量是实力对象,则拷贝其地址引用,也就是说新对象和原来对象是共用实例变量的。

  3. string字符串

若变量是string字符串,拷贝其地址引用,但是在修改时,它会从字符串池中重新生成一个新的字符串,原有的对象保持不变。

public class Book implements Cloneable {

    private int id;

    private String name;

    public Book() {}

    public Book(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return (Book)super.clone();
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        Book book1 = new Book();
        book1.setName("基础系列1");
        Book book2 = (Book) book1.clone();

        System.out.println("图书1:" + book1.getName());
        System.out.println("图书2:" + book2.getName());

        book2.setName("基础系列2");

        System.out.println("图书1:" + book1.getName());
        System.out.println("图书2:" + book2.getName());

    }
}

深拷贝和浅拷贝

浅拷贝
image.png
深拷贝

在深拷贝中无论值类型还是引用类型都会复制一份给克隆对象,深拷贝将原型对象的所有引用对象也复制一份给克隆对象。

image.png image.png
上一篇下一篇

猜你喜欢

热点阅读