Java的深拷贝和浅拷贝
熟悉C++的朋友对这个话题应该很熟悉,浅拷贝就是指两个对象共同拥有同一个值,一个对象改变了该值,也会影响到另一个对象。深拷贝就是两个对象的值相等,但是互相独立。本来想把以前写的一篇文章扩充一下,没想到居然牵扯出很多复杂的问题。本文测试环境是windows xp sp3中文版、NetBeans6.7.1,JDK1.6-update16。这里抛砖引玉,希望大家能提宝贵意见。 首先,Java中常用的拷贝操作有三个,operator = 、拷贝构造函数 和 clone()方法。由于Java不支持运算符重载,我们无法在自己的自定义类型中定义operator=。拷贝构造函数大家应该很熟悉,现在看一下如何支持clone方法: 实现 Cloneable 接口,因为 Object 的 clone 方法将检查类是否实现了 Cloneable 接口,如果没有将抛出异常 CloneNotSupportedException 对象。 Cloneable 接口没有任何方法,只是个标志,所以只需要简单的写上 implements Cloneable 即可。 改写从 Object 继承而来的 clone 方法,使它的访问权限为 public ,因为为了防止意外的支持 clone 操作, Object 的 clone 方法是 protected 权限。 通过上面的分析,可以看出,如果我们要给自己的类添加拷贝功能