Object源码分析

Posted caozx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Object源码分析相关的知识,希望对你有一定的参考价值。

第五个方法: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());

}

 技术分享图片

 


以上是关于Object源码分析的主要内容,如果未能解决你的问题,请参考以下文章

Object类的源码分析

Object源码分析

分析JDK源码 | Java Object

jdk源码分析——Object类

#tensorflow object detection api 源码分析

HashSet源码分析