Java中的堆与栈之克隆篇

       Java将内存空间分成两块,即栈和堆。在栈中保存基本类型和引用变量,在堆中保存对象。对于栈中的变量在使用完后会立即被回收,这样就可以继续创建其他的变量。而对于堆中的对象,是由虚拟机进行管理的,因此即使该对象已经不再使用,该内存空间只会在一个不确定的时间被回收。

一、假克隆

       Java中,对于基本类型可以使用“=”来进行克隆,此时两个变量除了相等没有任何关系。而对于引用类型却不能简单地使用“=”进行克隆。这与Java的内存空间使用有关。对于引用变量而言,使用“=”将修改引用,而不是复制堆中的对象。此时两个引用变量将指向同一对象。因此,如果一个变量对其进行修改则会改变另一个变量。

二、浅克隆

       Java中任何一个类都是Object类的直接或间接子类。如果类没有超类,则它默认继承自Object类。在Object类中,实现了很多有用的方法。当克隆对象时,需要使用clone()方法,该方法的声明如下:

protected Object clone() throws CloneNotSupportedException

       需要注意的是,该方法时一个受保护的方法,通常需要重写该方法并将访问权限限定符改成public。该方法将类中各个域进行复制,如果对于引用类型的域,这种操作就会有问题,因此称作浅克隆。提供克隆功能的类需要实现Cloneable接口,否则使用clone()方法时会抛出CloneNotSupportedExc

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值