美文网首页Java程序员
浅复制与深复制-集合储存的引用

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

作者: firststep | 来源:发表于2019-10-10 14:42 被阅读0次

发现问题

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

  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值。

相关文章

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

    发现问题 今天看一个面试题的时候发现了浅复制与深复制的这个问题,题是这样的: 首先定义一个自定义类型,其中该类型的...

  • 17.是否了解 深拷贝 和 浅拷贝 的概念,集合类深拷贝如何实现

    深拷贝内存拷贝 浅拷贝指针拷贝 浅拷贝 深拷贝 集合的浅复制 (shallow copy) 集合的浅复制有非常多种...

  • 前端笔记(二) 对象的深浅拷贝,函数的防抖与节流,函数柯里化 ,

    对象的深浅拷贝 对象的深拷贝与浅拷贝的区别: 浅拷贝:仅仅复制对象的引用, 而不是对象本身。 深拷贝:把复制的对象...

  • JS深浅拷贝

    浅拷贝 浅拷贝的意思就是只复制引用,而未复制真正的值。 深拷贝 深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制...

  • 面试题iOS

    面试blog 1、深拷贝浅拷贝:浅拷贝就是拷贝对象的指针,而不复制引用对象本身;深拷贝就是拷贝引用对象本身;浅复制...

  • JAVA 深拷贝 浅拷贝

    JAVA 深拷贝 浅拷贝 浅拷贝只是复制了引用, 这个引用还是指向原来的值 深拷贝那就是直接复制了整个Object...

  • js中的深拷贝和浅拷贝

    一、深拷贝与浅拷贝 深拷贝和浅拷贝只针对Object,Array这些复杂的引用对象。浅拷贝,只复制对象的引用的地址...

  • 深浅复制

    参考链接 iOS 集合的深复制与浅复制

  • Java的浅拷贝与深拷贝

    Java的浅拷贝与深拷贝 一、概念 浅拷贝浅拷贝仅仅复制所考虑的对象(包括对象中的基本变量),而不复制它所引用的对...

  • iOS全解11:特殊问题

    1、浅拷贝和深拷贝的区别? 浅拷贝:只复制指向对象的指针,指针指向同一个地址,而不复制引用对象本身。深拷贝:复制引...

网友评论

    本文标题:浅复制与深复制-集合储存的引用

    本文链接:https://www.haomeiwen.com/subject/fpzopctx.html