Navigation

    西南IT社区
    • Register
    • Login
    • Search
    • 主页
    • 问答
    • 话题
    • 热门
    • 圈子
    • 工作机会
    • 活动
    • 项目

    JAVA浅拷贝和深拷贝

    极客生涯
    java java浅拷贝和深拷贝
    1
    1
    73
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • diepao172
      diepao172 last edited by

      Java 对象拷贝是为对象赋值的一种方式,简单来说就是创建一个和原对象相同的对象,新创建的对象是原对象的一个副本,面试官贼拉喜欢在面试的时候问一问你浅拷贝和深拷贝的原理。因为它涉及到对象的引用关系,涉及到 Java 是传值还是传递引用关系,这通常是面试的重点。

      在 Java 中,除了基本数据类型之外,还存在引用数据类型。一般使用 = 号做赋值操作的时候,对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,也就是将原对象的引用传递过去,但是他们实际上还是指向的同一个对象。

      浅拷贝和深拷贝其实就是在引用的这个基础上来做区分的,如果在拷贝的时候,只对基本数据类型进行拷贝,对引用数据类型只是进行了引用的传递,没有真正的创建一个新的对象,这种拷贝方式就认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量,这种拷贝方式就被认为是深拷贝。
      浅拷贝(Shallow copy):简听起来这个概念十分的抽象,但是实践起来其实十分的简单,就是在需要拷贝的类上实现 Cloneable 接口并重写其 clone() 方法就可以了。

      3eb0f931-1b9b-4345-a5c7-55dc18172c9a-image.png

      深拷贝:简单来说,深拷贝就是的另一种说法。在进行对象拷贝的基础上,对对象的成员变量也依次拷贝的方式被称为深拷贝。

      9d38aecc-e385-4f24-bdd8-eb858d887b2a-image.png

      操作深拷贝和浅拷贝需要注意些什么呢?如果对象的属性都是基本数据类型,那么可以使用浅拷贝。如果对象有引用类型,那就要基于具体的需求来选择浅拷贝还是深拷贝。如果对象嵌套层数比较多,推荐使用 Serializable 接口实现深拷贝。如果对象引用任何时候都不会被改变,那么没必要使用深拷贝,只需要使用浅拷贝就行了。如果对象引用经常改变,那么就要使用深拷贝。没有一成不变的规则,一切都取决于具体需求。

      e5b8c4da-e14c-44ad-b865-6dbca192be98-image.png

      1 Reply Last reply Reply Quote 0
      • First post
        Last post
      使用HTML构建办公软件 使用HTML构建办公软件 使用HTML构建办公软件
      光
      A
      庆
      小
      U
      Y
      L
      I
      Z
      I
      Y
      C
      Z
      E
      Y
      U
      I
      A
      Z
      Y
      Y
      罗
      R
      大

      西南地区IT社群(QQ)
      云南
      【昆明网页设计交流吧】243627302
      【昆明nodejs交流吧】 243626749
      【VUE】838405306
      【云南程序员总群】343606807
      【昆明UI设计】104031254
      【云南软件外包】15547313
      贵州
      【PHP/java源码/站长交流群】55692114
      四川
      【成都Java/JavaWeb交流】86669225
      【vaScript+PHP+MySql】116270060
      【UI设计/设计交流学习群】135794928
      重庆
      【诺基亚 JAVA游戏博物馆】 559479780
      【PHP,Java,Python,C++接单】 442103442
      西藏
      社群
      昆明网页设计交流吧
      友情链接
      • Funtask
      • Funtask 社区
      • SUWIS
      ©2019-2021 滇ICP备20006698号