深克隆和浅克隆的区别:

被克隆的类需要实现Clonenable标记接口,重写父类Object类中的方法clone。

浅克隆: 浅克隆是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。
深克隆: 深克隆不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。

代码演示:

/*** 学生类*/
public class Student implements Cloneable {private String name;private int age;//重写Object类的方法clone@Overridepublic Object clone() throws CloneNotSupportedException {Student student = (Student) super.clone();return student;}public Student() {super();}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}
/*** 老师类*/
public class Teacher implements Cloneable{private String name;private int age;private Student student;public Teacher(String name, int age, Student student) {this.name = name;this.age = age;this.student = student;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Student getStudent() {return student;}public void setStudent(Student student) {this.student = student;}@Overridepublic String toString() {return "Teacher{" +"name='" + name + '\'' +", age=" + age +", student=" + student +'}';}@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}
}
/*** 测试浅克隆*/
public class TestClone {public static void main(String[] args) throws CloneNotSupportedException {//创建Person类对象并复制一份Teacher teacher1 = new Teacher("王老师", 36, new Student("张三",15));Teacher teacher2 = (Teacher) teacher1.clone();Student student = teacher2.getStudent();//修改浅克隆出来的老师的学生成员变量的值//源老师的成员变量学生的值也被改变student.setAge(5);student.setName("小杨");System.out.println(teacher1);System.out.println(teacher2);}
}

执行结果:

深克隆的时候就要把克隆的对象中的引用类型的成员再克隆一次。

&emso; 再次修改上面的 Teacher 类重写父类Objcet的方法clone:
代码:

 @Overridepublic Object clone() throws CloneNotSupportedException {Teacher teacher = (Teacher) super.clone();//把引用类型的变量在克隆一份teacher.setStudent((Student) teacher.getStudent().clone());return teacher;}

再次执行测试类的执行结果:

这次修改克隆的Teacher类的变量的值,源Teacher的值就不再受影响了。

Java中的浅克隆和深克隆相关推荐

  1. Java中的浅克隆与深克隆

    Java中的浅克隆与深克隆 一:前言 二:浅克隆与深克隆的区别 一:前言 克隆,即复制一个对象,该对象的属性与被复制的对象一致,如果不使用Object类中的clone方法实现克隆,可以自己new出一个 ...

  2. 详细分析Java中的浅克隆和深克隆

    本文对浅克隆和深克隆的两种方法(不引入别的开源工具)进行了简单的代码实现(没有内部类语法),对比了浅克隆和深克隆对引用类型的影响,暂不考虑不可变类,确保初学Java者能够看懂并学会,可直接复制源代码进 ...

  3. Java对象克隆——浅克隆和深克隆的区别

    在Java中对象的克隆有深克隆和浅克隆之分.有这种区分的原因是Java中分为基本数据类型和引用数据类型,对于不同的数据类型在内存中的存储的区域是不同的.基本数据类型存储在栈中,引用数据类型存储在堆中. ...

  4. java对象的浅克隆和深克隆

    引言: 在Object基类中,有一个方法叫clone,产生一个前期对象的克隆,克隆对象是原对象的拷贝,由于引用类型的存在,有深克隆和浅克隆之分,若克隆对象中存在引用类型的属性,深克隆会将此属性完全拷贝 ...

  5. Java中的深克隆和浅克隆的原理及三种方式实现深克隆

      本文详细介绍了Java中的浅克隆和深克隆的概念,及案例演示如何实现深克隆! 文章目录 1 克隆概述 2 深克隆实现 3 案例 3.1 测试普通clone方法--浅克隆 3.2 使用重写后的clon ...

  6. 浅析Java中的深克隆和浅克隆

    说实话,目前为止还没在项目中遇到过关于Java深克隆和浅克隆的场景.今天手抖戳开了花呗账单,双十二败家的战绩真是惨不忍睹,若能在我的客户端"篡改"下账单金额,那该(简)有(止)多( ...

  7. 【重难点】【Java基础 06】浅克隆与深克隆、Object类的常用方法、util包下的接口

    [重难点][Java基础 06]浅克隆与深克隆.Object对象的常用方法.util包下的接口 文章目录 [重难点][Java基础 06]浅克隆与深克隆.Object对象的常用方法.util包下的接口 ...

  8. Java中对象的深克隆和浅克隆

    2019独角兽企业重金招聘Python工程师标准>>> 浅克隆和深克隆的概念 浅克隆:被克隆的对象里的所有变量值都与原来的对象相同,而所有对其他对象的引用仍然指向原来的对象.简而言之 ...

  9. Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...

  10. java中浅克隆与深克隆解析

    文章目录 简介 浅克隆 深克隆 嵌套使用clone()方法 序列化方式 浅克隆和深克隆的比较 简介 所谓克隆,就是指依照已存在的数据,复制出一份一样的数据. java中的克隆有浅克隆和深克隆之分,造成 ...

最新文章

  1. [angularjs] angularjs系列笔记(四)控制器
  2. firefox设置代理服务器
  3. redis:消息发布与订阅频道
  4. Logisim 一个PLA电路
  5. Apache Mahout:入门
  6. 【Kattis - triangle 】Sierpiński Circumference(数学,求位数,取对数或Java)
  7. Ubuntu下安装最新版QQ
  8. 5场直播丨PostgreSQL、openGauss、Oracle、GoldenDB、EsgynDB
  9. MyBatis框架parameterType为哈希类型的别名映射和resultMap映射
  10. VB直接播放EXE文件中的声音文件
  11. 阿里OSS对象存储,实现图片上传进度显示ProgressListener;
  12. bzoj2783: [JLOI2012]树
  13. micropython按键控制流水灯_【MicroPython】LAB01 - 流水灯
  14. 1小时教你理解HTTP,TCP,UDP,Socket,WebSocket
  15. 使用python做一个翻译工具
  16. 西瓜创客_西瓜创客_西瓜创客下载安装_西瓜创客app安卓版下载_好趣手游网
  17. linux ls 配色方案,Terminal 配色方案
  18. tortoise git 冲突解决
  19. EFFECTIVE C++ (万字详解)(一)
  20. 小技巧——网页下载提速

热门文章

  1. iOS商城demo、音乐播放器、视频通话、自定义搜索、转场动画等源码
  2. 20170831_安装软件
  3. sublime test3 安装及配置
  4. 一个容易失误的字符串转字符问题
  5. mfc中句柄与指针的区别
  6. 计算机科学现代教育,现代教育技术教程-计算机科学教育.pdf
  7. 火星开发的价值_发现“火星”岩石密度比预想更低,火星探测开发的“九大价值”...
  8. 腾讯云 python接口_python调用腾讯云短信接口
  9. 【数据分享】维基百科Wiki负面有害评论(网络暴力)文本数据多标签分类挖掘可视化
  10. 拓端tecdat|R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长