对象拷贝
作用:
- 提升对象创建的效率。
分类:
- 浅拷贝:拷贝对象时,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);这是采用反射实现的,属于浅拷贝。