关于Java深度克隆和浅度克隆的简单说明

这个问题一个月之前就想写一下的一直拖到现在囧~~
问题的来源是我在做一次笔试题的时候遇到的这个问题,当时就有点mengbi了…… 后来研究了一下 也给还不知道的同学借鉴一下。

进入正题:

UserInfo user1 = new UserInfo(“漫步”,22);
UserInfo user2 = user1;

这样 user2和user1就指向了同一个UserInfo对象,但是这样带来的问题就是,当你操作user1或者user2的时候都会给对方造成影响。这个时候就可以使用“克隆”:

UserInfo user2 = user.clone();

这样user2就指向了一个新的UserInfo对象,且数据成员和user1相同。到这里 叫做“浅度克隆”
但是新的问题又出现了,clone()只是针对基本数据类型,对于引用类型 比如日期Date还是简单的将对象指过去。所以我们需要进行“深度克隆”:

 public class UserInfo implements Cloneable{
    public Object clone() throws CloneNotSupportedException  {
        UserInfo clonedUser = (UserInfo) super.clone();
        clonedUser.date = (Date) date.clone();//date是数据成员
        return clonedUser;
    }
 }

这样我们在再进行:

UserInfo user2 = user1.clone();

就不会有问题了。
这就是深度克隆。

嗯……说的有点肤浅,但是大家能看懂就好了。 想要更加详细的了解的可以去大神们的博文看看,只是了解一下的话 我写的就够了。

转载于:https://www.cnblogs.com/codenoodles/p/6421157.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值