关于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();

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

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

posted @ 2016-05-10 22:03  Z漫步  阅读(180)  评论(0编辑  收藏  举报