这个问题一个月之前就想写一下的一直拖到现在囧~~
问题的来源是我在做一次笔试题的时候遇到的这个问题,当时就有点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();
就不会有问题了。
这就是深度克隆。嗯……说的有点肤浅,但是大家能看懂就好了。 想要更加详细的了解的可以去大神们的博文看看,只是了解一下的话 我写的就够了。