对象拷贝
作用:
- 提升对象创建的效率。
分类:
- 浅拷贝:拷贝对象时,String、基本类信息变量属性复制,引用对象不复制。
- 深拷贝:拷贝对象时,所偶有属性都赋值一份。
实现方式:
- 通过clone方法实现。浅拷贝只要拷贝对象实现Cloneable接口并重写clone方法即可;深拷贝需要所有属性对象都实现Cloneable接口并重写clone方法,同时拷贝对象在重写clone方法时要通过拷贝的方式对引用属性赋值。
// 所有属性对象均要实现clone接口,并重写clone方法
public Object clone() throws CloneNotSupportedException {
Study s = (Study) super.clone();
s.setScore(this.score.clone()); // 引用对象需要用克隆的方式赋值
return s;
}
- 序列化克隆,属于深拷贝。
Student stu1 = new Student("宁采臣",a,174);
//通过序列化方法实现深拷贝
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(stu1);
oos.flush();
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));
Student stu2 = (Student)ois.readObject();
-
BeanUtils.copyProperties(a,c);这是采用反射实现的,属于浅拷贝。