第五个方法:protected native Object clone() throws CloneNotSupportedException;
源码简介:
clone方法首先会判对象是否实现了Cloneable接口,若无则抛出CloneNotSupportedException;
当某个类要复写clone方法时,要继承Cloneable接口。通常的克隆对象都是通过super.clone()方法来克隆对象。
一般的super.clone().getClass=x.getClass()。
clone有浅复制与深复制一说,浅复制与深复制的区别是对引用对象的处理区别:
(1)浅复制:
对于基本数据类型单纯复制值;
对于复合数据类型仅复制该栈值,如数组变量则复制地址,对于对象变量则复制对象的引用。
结果:
所以修改per2的hobby会影响per1,但是对于基本数据类型,age不会受影响。
(2)深复制,就是对于复合类型,重新new出来,给它赋值,然后set到克隆体。
代码同上,只需要将Person的浅复制代码注释,放开深复制代码;
结果:
所以对于深复制,修改per2并不会影响per1。
第六个方法:返回对象的字符串表示。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}