转自:https://blog.csdn.net/qq_34110755/article/details/79914639

1.浅拷贝
对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。

2.深拷贝
对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。

在阿里巴巴java开发规范中可以看到“慎用 Object 的 clone 方法来拷贝对象。
说明: 对象的 clone 方法默认是浅拷贝,若想实现深拷贝需要重写 clone 方法实现属性对象

的拷贝。 ”

首先,实现克隆必须要实现Cloneable接口并重写clone方法

public class Patent implements Cloneable {public String xm;public Child child;public Patent(Child child) {this.child = child;}@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}
}
public final class Child {public String name;
}

以上就是浅拷贝的代码 我们来结果

可以看到,a.child和b.child都指向同一个引用,所以b.chil的name属性改变后等于a.child的name也改变了

所以这是浅拷贝要慎用的原因

至于xm为什么没变,因为xm是string类型 了解string的朋友知道,string的值发生改变时 实际上是重新new了一个string 也就是新划分了一块内存

博主 清风飏 的话说得很好 "如果想要深拷贝一个对象, 这个对象必须要实现Cloneable接口,实现clone方法,并且在clone方法内部,把该对象引用的其他对象也要clone一份 , 这就要求这个被引用的对象必须也要实现Cloneable接口并且实现clone方法。"

java:clone 深拷贝与浅拷贝,为什么要慎用浅拷贝相关推荐

  1. java clone 深拷贝_Java clone() 浅拷贝 深拷贝

    假如说你想复制一个简单变量.很简单: int apples = 5;int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,f ...

  2. Java的深拷贝和浅拷贝

     熟悉C++的朋友对这个话题应该很熟悉,浅拷贝就是指两个对象共同拥有同一个值,一个对象改变了该值,也会影响到另一个对象.深拷贝就是两个对象的值相等,但是互相独立.本来想把以前写的一篇文章扩充一下,没想 ...

  3. 学习Java的深拷贝和浅拷贝

    关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象.可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用 ...

  4. Java基础 深拷贝浅拷贝

    Java基础 深拷贝浅拷贝 非基本数据类型 需要new新空间 class Student implements Cloneable{private int id;private String name ...

  5. java 对象深拷贝_java深入理解浅拷贝和深拷贝

    简介 拷贝对象是java中经常会遇到的问题.java中存在两种类型,基础类型和引用类型. java的赋值都是传值的,对于基础类型来说,会拷贝具体的内容,但是对于引用对象来说,存储的这个值只是指向实际对 ...

  6. 漫谈deepcopy(深拷贝)和shallowcopy(浅拷贝)

    原型模式要求用深拷贝(复制/克隆)的方式实现,对这个概念很模糊.在自己查了相关资料后,我将从三个方面讲述深浅拷贝: 图形表述深浅拷贝区别及特点 Object类中的clone()方法实现深浅拷贝 实际应 ...

  7. java clone方法_Java Calendar clone()方法与示例

    java clone方法 日历类clone()方法 (Calendar Class clone() method) clone() method is available in java.util p ...

  8. [转载] java clone方法_Java Calendar clone()方法与示例

    参考链接: Java中的Clone()方法 java clone方法 日历类clone()方法 (Calendar Class clone() method) clone() method is av ...

  9. java clone() 方法详解及深克隆与浅克隆

    概述 clone 翻译过来就是 克隆,顾名思义就是创造一个一模一样的事物.Java 代码中 clone() 方法是 Object 方法,而 Object 又是所有类的父类,也就是说所有 java 对象 ...

最新文章

  1. 手机与Camera CCM技术发展趋势
  2. 万字长文:助你攻破 JAVA NIO 技术壁垒
  3. java 日志_跟着Tomcat学编码:Java 原生日志框架分析
  4. android 流式编程,流式编程
  5. 为什么重启路由器 经常重启让WiFi更快
  6. 20179214 2017-2018-2 《密码与安全新技术》第七次作业
  7. 会议报到和撒离时间算会期_【明日报到】2020中国(三门峡)食用菌新产品新技术博览会工作人员开始分装资料...
  8. 写给Java开发者看的JavaScript对象机制
  9. java数组存入mysql_将数组存入数据库的解决方法及用VC与数据库交互
  10. 用c语言在Clion平台编写system(“cls“)清屏函数无效甚至异常解决方法。
  11. php 盗链新浪图片_php实现博客,论坛图片防盗链的方法
  12. Windows与ipad共享文件
  13. 上海交大吴齐天的科研思考
  14. POSTGRESQL 差点发生一次冻结炸弹后的反思
  15. MeteoInfoLab脚本示例:站点填图
  16. 「涪陵榨菜」使用区块链溯源系统?回应:看榨菜集团的安排
  17. [ABC283D] 题解
  18. 文末送书!看懂这本书,程序员可以自信地说“我要打十个”!
  19. 手把手教你vlookup两个表格间对应数据的匹配!
  20. debian虚拟机更改ip地址、主机名

热门文章

  1. Oracle补丁介绍
  2. Blender绿幕抠像并导出
  3. 修改pycharm缓存文件路径
  4. 用css实现简易报警灯
  5. Ebay买家号也会被封吗?
  6. [jenkins] 启动错误 Failed to start LSB: Jenkins Automation Server.
  7. Linux C TCP Socket实现客户与服务器简单通信
  8. 一个8*8的方格子,A点在左下角,B点在右上角,求A点到B点的最短路径有多少条
  9. HOW TO | 让自己的终端漂亮得不像实力派
  10. 关于CSDN中IP变化的提醒