黑马程序员 新解---> java的堆内存和栈内存

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------


我在学习有关clone(克隆)的相关知识的时候,突然觉得堆内存还可以这样理解:

我先说说clone的一些知识吧:

我在书上看到了关于clone的一些知识点,书中提到:默认的克隆操作是浅拷贝,也就是说,clone只是对当前对象进行了拷贝,而没有拷贝对象中引用了的其他对象。对于浅克隆和深克隆有如下定义:

浅拷贝浅克隆)具体含义是:被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

深拷贝(深克隆)具体含义是:被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制的新对象,而不再是原有的那些被引用的对象。换言之,深复制把复制的对象所引用的对象都复制了一遍。

那么这里就涉及到了一个名词:“对象中的内部对象”或者说“深层对象”

我突然觉得,在堆内存中创建了一个对象,那么,这个对象中包含着诸如姓名(String类型),日期(Date类型)等等此类的数据,那么拿“姓名”这个数据来说,是对String中“对象”的引用(有关String的一些理解会在后面的文章中浅谈的),那么,这么说来,创建的对象中存在name,而name又是引用的String中的对象,这样说来,可以理解成“对象中的对象”或者说堆内存中存在“深层对象”。

用下面的图例表示说明: 

 


图中表明:在堆内存中创建的对象,又会分别将自身的各对应的类型归类(字符串类型归为String类型中)。就好像说这是一种“深层引用”一般,从String这样的类型“数组”中引用出来,并用新的类型(如图中的Employee类型)包装(或集合)起来一样。而像salary这种数值数据,是属于基本double这样的类型数据的,是和String有着不一样的类型,因此不会“深层引用”对应的类型了(当然也没有这种类型)。

我不太确定,这种理解是不是正确的,只是突发奇想的理解,其实,更多的是对内存分配的一点点兴趣而已,清楚了内存是如何分配的,有利于更好地理解程序是如何运行的,这对于学习java也是一种激励和乐趣吧。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值