Java中Object类的clone()(克隆)方法

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

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

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

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

3、实现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。

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

《Java疯狂讲义》学习笔记。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值