Clone与New解析

对象创建的方式

  1. 使用new关键字
  2. 使用clone方法
  3. 反射机制
  4. 反序列化
  • 1、3方式会显示的调用对象的构造函数
  • 2是在在内存上对已存在的对象的一种引用,不会调用构造函数
  • 4是从文件中还原类的对象

clone:

  拷贝对象返还一个新对象,不是对源对象的引用,并且拷贝是对源对象的数据块的拷贝,包换源对象的信息,不是对象的初始信息,且不会调用构造函数。

  前提:类必须实现Cloneable接口,Cloneable接口是是一个空接口,实现了该接口才支持clone操作。

  疑问:既然Cloneable接口是空接口,且Java的对象中默认父类Object中也有clone方法,为什么还必须要实现该接口呢?

  这就是标志接口的意义,实现该接口,才能进行clone操作,因为JVM在clone对象时会检查该对象是否实现Cloneable接口,如果没有实现则会报CloneNotSupportedException异常。类似的接口还有Serializable接口,RandomAccess接口等。

  而拷贝也分深拷贝浅拷贝

new:

  jvm对new操作也有优化,轻量级对象使用new的速度回比clone快,但是复杂的对象,如在构造函数里面有复杂操作的,clone更快一点。

上一篇:Java 浅拷贝和深拷贝的理解和实现方式


下一篇:Java对于赋值,浅拷贝,深拷贝的原理理解以及深入思考