Java 深浅拷贝

Java 深浅拷贝

浅拷贝只复制一个对象(包括基本类型),对象内部存在的指向其他对象数组或者引用则不复制 ,拷贝后两个指针指向同一个内存空间,类似于文件创建快捷方式。

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 clone(T obj) {

// 拷贝产生的对象

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;

}

}


分享到:


相關文章: