clone 深克隆和浅克隆的区别

没有使用clone时,复制:

第一种:复制对象

 这样的复制,是把地址给了出去,这样修改一个,都会被修改。

第二种:把每个值都传一遍

 缺点:很麻烦。

使用克隆:

浅克隆:会将对象中的引用地址直接拷贝

①,实现克隆接口

②,重写clone方法

 修改返回值类型

 

public class Demo {
    public static void main(String[] args) {
        User user = new User(1,"tom",new String[]{"睡觉","看书"});
        User user1 = null;
        try {
            user1 = user.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        user1.setName("tomcat");
        System.out.println(user);
        System.out.println(user1);
    }
}

 

缺陷:只会影响属性是引用数据类型,如果是包装类和String是不会受影响

深克隆:克隆只克隆元素值!“N次克隆” 

 @Override
    public User clone() throws CloneNotSupportedException {
     //浅克隆
        User cloneUser = (User) super.clone();
        //当前对象的爱好(内存地址) ---》 修改引用类型的内存地址:从浅克隆——》深克隆
        String[] hobby = this.getHobby();
        //复制
        String[] copyHobby = Arrays.copyOf(hobby,hobby.length);
        //新数组重新赋给对象
        cloneUser.setHobby(copyHobby);
        return cloneUser;
    }

深克隆把克隆对象的所有值都克隆一遍,不会出现地址重复的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值