clone()的深拷贝、浅拷贝

浅拷贝:拷贝时,直接复制对象区域,如果属性中有引用对象,则直接拷贝引用而不是对象本身,所以新对象和旧对象的引用属性,改变时会互相影响。

深拷贝:新对象与旧对象不互相影响,拷贝时需要对引用类型的属性特殊拷贝处理,比如针对引用对象本身再调用该对象的clone一次。

Object的clone()方法,该方法为浅拷贝,即对象中的属性如果为引用类型,也直接将引用赋值给新对象。另外,实现该方法时,需要继承Cloneable接口,否则运行报错。

Object的方法如下:

protected  Object clone()
          创建并返回此对象的一个副本。
 boolean equals(Object obj)
          指示其他某个对象是否与此对象“相等”。
protected  void finalize()
          当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
 Class<?> getClass()
          返回此 Object 的运行时类。
 int hashCode()
          返回该对象的哈希码值。
 void notify()
          唤醒在此对象监视器上等待的单个线程。
 void notifyAll()
          唤醒在此对象监视器上等待的所有线程。
 String toString()
          返回该对象的字符串表示。
 void wait()
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
 void wait(long timeout)
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
 void wait(long timeout, int nanos)
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。

猜你喜欢

转载自1181731633.iteye.com/blog/2355925