Java基础之(二十七)clone()方法

    xiaoxiao2026-05-20  4

    说明 Java提供了一个projected修饰的clone()方法,该方法用来实现对象的“自我克隆”,即得到当前对象的一个副本,并且两个对象之间完全隔离。需要注意的是,由于该方法使用projected修饰,因此该方法只能被子类重写或者调用。

    自定义类实现克隆的步骤如下:

    首先自定义类需要实现Cloneable接口,该接口只是一个标记性接口(接口中没有定义任何方法),表明实现该接口的类可以实现“自身复制”;

    自定义类实现自己的clone方法;

    现clone方法时通过super.clone();调用Object类的clone方法得到当前对象的副本,并放回该副本。

    如下程序示范了如何实现“自我克隆”:

    class Address{ String detail; public Address(String detail){ this.detail = detail; } } class User implements Cloneable{ int age; Address address; public User(int age){ this.age = age; address = new Address("杭州"); } public User clone() throws CloneNotSupportedException{ return (User)super.clone(); } } public class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { User user = new User(28); User user1 = user.clone(); System.out.println(user == user1); System.out.println(user.address == user1.address); } } 输出结果: false true

    可以看出,克隆出来的对象只是原有对象的副本,因此在判断原有对象和克隆出来的对象是否相等时,返回false。虽然Object对象的clone方法虽然简单易用,但它正是一种浅克隆,即它克隆该对象的所有成员变量值,不会对引用类型的成员变量值所引用的对象进行克隆,因此比较两个对象的address时的返回值为true。

    如果需要对对象进行深克隆,那么需要我们自己进行递归克隆,以保证所有引用成员变量所引用的对象都被复制。

    转载请注明原文地址: https://ju.6miu.com/read-1309881.html
    最新回复(0)