关于clone的问题
影子clone和深度clone的问题
以下引自《java中传值和传址及其引伸深度克隆的思考》
“java中的所有对象都是Object类的子类,Object类定义了protected clone()方法,它的作用和c++ 中按位复制是一样的,因此同样会带来如果对象中包含另一个对象(注意是对象不是基本数据类型,基本数据类型直接就会被复制)的指针(java中的句柄),clone并没有将被包含的对象clone,而是复制了被包含对象的句柄或者说指针。因此并不能认为复制出来的对象就可以随心所欲的修改,因为它和被clone 的对象都包含同一个对象,因此可能会引起潜在的冲突问题。
至于深度clone的方法很简单,就是在子类中覆盖父类Object类中clone方法,保证每一个被包含的对象都被按照位被clone。如果包含的数据全部是基本类型数据,那么就什么也不用做了。深度clone还有另一种方法就是利用Serializable,但是对象中被transient关键字修饰的变量是不会被序列化的. 因为clone用到的地方并不多,就不多说了。但是当你遇到的时候,一定要小心。”
没有评论:
发表评论