浅拷贝:拷贝时,直接复制对象区域,如果属性中有引用对象,则直接拷贝引用而不是对象本身,所以新对象和旧对象的引用属性,改变时会互相影响。
深拷贝:新对象与旧对象不互相影响,拷贝时需要对引用类型的属性特殊拷贝处理,比如针对引用对象本身再调用该对象的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() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。 |