码迷,mamicode.com
首页 > 其他好文 > 详细

Object源码分析(二)

时间:2018-01-17 00:17:16      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:not   表示   数据类型   基本数据   post   throw   字符串表   gpo   基本数据类型   

第五个方法: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源码分析(二)

标签:not   表示   数据类型   基本数据   post   throw   字符串表   gpo   基本数据类型   

原文地址:https://www.cnblogs.com/caozx/p/8297209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!