java:clone 深拷贝与浅拷贝,为什么要慎用浅拷贝
转自: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 深拷贝与浅拷贝,为什么要慎用浅拷贝相关推荐
- java clone 深拷贝_Java clone() 浅拷贝 深拷贝
假如说你想复制一个简单变量.很简单: int apples = 5;int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,f ...
- Java的深拷贝和浅拷贝
熟悉C++的朋友对这个话题应该很熟悉,浅拷贝就是指两个对象共同拥有同一个值,一个对象改变了该值,也会影响到另一个对象.深拷贝就是两个对象的值相等,但是互相独立.本来想把以前写的一篇文章扩充一下,没想 ...
- 学习Java的深拷贝和浅拷贝
关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象.可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用 ...
- Java基础 深拷贝浅拷贝
Java基础 深拷贝浅拷贝 非基本数据类型 需要new新空间 class Student implements Cloneable{private int id;private String name ...
- java 对象深拷贝_java深入理解浅拷贝和深拷贝
简介 拷贝对象是java中经常会遇到的问题.java中存在两种类型,基础类型和引用类型. java的赋值都是传值的,对于基础类型来说,会拷贝具体的内容,但是对于引用对象来说,存储的这个值只是指向实际对 ...
- 漫谈deepcopy(深拷贝)和shallowcopy(浅拷贝)
原型模式要求用深拷贝(复制/克隆)的方式实现,对这个概念很模糊.在自己查了相关资料后,我将从三个方面讲述深浅拷贝: 图形表述深浅拷贝区别及特点 Object类中的clone()方法实现深浅拷贝 实际应 ...
- java clone方法_Java Calendar clone()方法与示例
java clone方法 日历类clone()方法 (Calendar Class clone() method) clone() method is available in java.util p ...
- [转载] java clone方法_Java Calendar clone()方法与示例
参考链接: Java中的Clone()方法 java clone方法 日历类clone()方法 (Calendar Class clone() method) clone() method is av ...
- java clone() 方法详解及深克隆与浅克隆
概述 clone 翻译过来就是 克隆,顾名思义就是创造一个一模一样的事物.Java 代码中 clone() 方法是 Object 方法,而 Object 又是所有类的父类,也就是说所有 java 对象 ...
最新文章
- 手机与Camera CCM技术发展趋势
- 万字长文:助你攻破 JAVA NIO 技术壁垒
- java 日志_跟着Tomcat学编码:Java 原生日志框架分析
- android 流式编程,流式编程
- 为什么重启路由器 经常重启让WiFi更快
- 20179214 2017-2018-2 《密码与安全新技术》第七次作业
- 会议报到和撒离时间算会期_【明日报到】2020中国(三门峡)食用菌新产品新技术博览会工作人员开始分装资料...
- 写给Java开发者看的JavaScript对象机制
- java数组存入mysql_将数组存入数据库的解决方法及用VC与数据库交互
- 用c语言在Clion平台编写system(“cls“)清屏函数无效甚至异常解决方法。
- php 盗链新浪图片_php实现博客,论坛图片防盗链的方法
- Windows与ipad共享文件
- 上海交大吴齐天的科研思考
- POSTGRESQL 差点发生一次冻结炸弹后的反思
- MeteoInfoLab脚本示例:站点填图
- 「涪陵榨菜」使用区块链溯源系统?回应:看榨菜集团的安排
- [ABC283D] 题解
- 文末送书!看懂这本书,程序员可以自信地说“我要打十个”!
- 手把手教你vlookup两个表格间对应数据的匹配!
- debian虚拟机更改ip地址、主机名