Cloneable -- Java中的拷贝

昨天看一个知识点的时候,聊到了Java中的拷贝,感觉那边扩展的太多会影响到那边文章的篇幅,那么就在这里进行内容补充吧。讲到Cloneable接口的时候讲到了拷贝,那么我们在这里聊聊拷贝到额一些东西。

首先从Java中传值方式入手,我们平时以为基本数据类型是值传递,引用数据类型是引用传递,其实不全是。像我们平时的int类型,是独立的,如果我们对一个变量a1 = 0进行拷贝,那么在内存中的存储是下面这样的:

那这时候我们对a2进行修改,并不会影响到a1的值。那一个引用数据类型是什么样的呢:

引用数据类型是非独立的,如a1,平时在栈中保存的是new出的对象在堆中的地址,那么对其进行拷贝,就是对该地址进行拷贝,那么我们修改a2对象的内容的时候,该地址指向的对象内容被修改了,那么保存同地址的a1其实也被修改了。

然后看看比较特殊的String。了解过JVM的内容应该都知道常量池这个东西,而且还知道一点,String其实保存的是常量,平时对String对象操作,都是创建了一个新的常量。然后这个常量池在Jdk1.8之后是在元空间中。想想大概也知道怎么回事了吧,我们创建了一个String变量并对其拷贝,是怎样的呢?

这时候a1和a2是非独立的,后来我们对a2进行了修改,其实就是在常量池中创建了个新的常量,并让a2指向该地址,后来a1 和a2又变成独立的了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值