浅复制与深复制-集合储存的引用

发现问题

今天看一个面试题的时候发现了浅复制与深复制的这个问题,题是这样的:

  1. 首先定义一个自定义类型,其中该类型的一个字段为id,然后为该字段赋值id=1。
  2. 接着定义两个ArrayList,把该类分别放入这两个list中。
  3. 修改其中的list的一个id=2,那么另外一个list的id会变么?
分析问题
  1. 按照正常的思维肯定是不会变的呀,因为修改的是其中一个ArrayList中对象的值,为什么另外一个的也会改变呢?可是运行出来的结果发现两个都变成了2.
  2. 这就涉及到了要聊的浅复制与深复制,因为当定义该Class的时候Java虚拟机会在内存中开辟一块空间存放id为1的对象。其中放入到两个list中的是对于该地址的引用。
  3. 所以当获取到该引用修改对象时候,改变的是内存地址中的值。两个list里面的引用是没变的。
解决问题
  1. 那么如何解决这样的问题呢,我们可以使用clone()方法来解决。定义好第一个Class的对象之后,调用clone()方法来赋值给第二个对象。
  2. 这样会在内存空间中再开辟一片空间给第二个对象,再次分别放入list1和list2中,修改list1中的id值,并不会影响到list2中的id值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值