在JAVA不可见类设计中,我们一个很常见的操作就是在返回值处作拷贝式防御。那我们该作怎样的拷贝操作呢?=还是.clone?这就涉及到浅拷贝和深拷贝。
浅拷贝:仅仅拷贝对象的地址,这样虽然快,但是是不安全的,因为拷贝地址就相当于同时返回了一份改变对象的权限,这样子用户就可以通过改变返回的对象来绕过方法改变类中对象。
典型的方法有 =
深拷贝:完成一份独立的副本,其中除了地址,其他内容完全一样,这样虽然效率低,但是是安全的。
典型的方法有.clone()
所以我们在返回值处作拷贝式防御必须选择深拷贝。