浅拷贝只复制一个对象(包括基本类型),对象内部存在的指向其他对象数组或者引用则不复制 ,拷贝后两个指针指向同一个内存空间,类似于文件创建快捷方式。
Person person = new Person("lipeng",22);
Person person1 = person;
调用Object的Clone的函数(也是浅拷贝)
Person person = new Person("lipeng",22);
Person person1 =(Person) person.clone();
深拷贝:对象以及对象内部的引用均复制,深拷贝后指针指向两个不同地址,重新new一个一模一样的对象,深拷贝的两个对象完全独立,解决不能管理子对象的问题的。
Person person = new Person("lipeng",22);
Person person1 =(Person) person.deepClone();
推荐使用序列化实现对象的拷贝
public class CloneUtils {
// 拷贝一个对象
@SuppressWarnings("unchecked")
public static
// 拷贝产生的对象
T clonedObj = null;
try {
// 读取对象字节数据
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
// 分配内存空间,写入原始对象,生成新对象
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
//返回新对象,并做类型转换
clonedObj = (T)ois.readObject();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
return clonedObj;
}
}
閱讀更多 每日編程 的文章