深层复制与浅层复制
深层复制:Java对象的深层复制是指Java对象A本身被复制成新对象B,同时A的属性也是被复制成新对象,赋值到A的各个属性上去,A与B的相同属性都引用到不同的对象。
浅层复制:A与B的属性没有复制成新的属性。比如: 虽然B与A的地址不同,但是B对象的成员对象与A对象对应的成员对象是同一个对象。
事例如下:
//手机实体类
package com.softstome.clone;
import java.io.Serializable;
public class Phone implements Cloneable,Serializable{
private String color;
private String pinpai ; //品牌
private String[] gyss;
public Phone(){
}
public Phone(String color, String pinpai) {
super();
this.color = color;
this.pinpai = pinpai;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getPinpai() {
return pinpai;
}
public void setPinpai(String pinpai) {
this.pinpai = pinpai;
}
public String[] getGyss() {
return gyss;
}
public void setGyss(String[] gyss) {
this.gyss = gyss;
}
@Override
protected Phone clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return (Phone)super.clone();
}
}
//学生实体类
package com.softstome.clone;
import java.io.Serializable;
/*
* 实现Serializable接口是为了通过序列化的方式实现深层复制
*
* 实现Cloneable接口是为了通过 clone的方式实现实现深层复制
* */
public class Student implements Cloneable,Serializable {
private int stid;
private String stname;
private Phone phone;
public Student(){
}
public Student(int stid, String stname,Phone phone) {
super();
this.stid = stid;
this.stname = stname;
this.phone=phone;
}
public int getStid() {
return stid;
}
public void setStid(int stid) {
this.stid = stid;
}
public String getStname() {
return stname;
}
public void setStname(String stname) {
this.stname = stname;
}
public Phone getPhone() {
return phone;
}
public void setPhone(Phone phone) {
this.phone = phone;
}
//重写克隆方法 实现对象的拷贝
@Override
protected Student clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
Student stu=(Student)super.clone();
//要实现深层赋复制 ,必须要有这一句。(去掉则变成浅层拷贝)
stu.phone=phone.clone();
return stu;
}
}
//演示类
package com.softstome.clone;
public class TestClone {
/*
* 拷贝手机对象
* */
public void testClone1() throws CloneNotSupportedException {
Phone pn=new Phone();
String[] sz={"aa","bb"};
pn.setGyss(sz);
Phone pn1=(Phone)pn.clone();
System.out.println(pn +" "+pn1);
System.out.println(pn.getGyss()+" "+pn1.getGyss());
String[] sz1={"cc","dd"};
pn1.setGyss(sz1);
System.out.println(pn.getGyss()+" "+pn1.getGyss());
}
/*
* 拷贝(克隆)学生对象
* */
public void testClone2() throws CloneNotSupportedException{
Student stu=new Student(1,"张三",new Phone("红色", "三星"));
Student stu1=(Student)stu.clone();
stu.setStname("张三1");
stu.getPhone().setColor("黑色");
System.out.println(stu.getStid()+" "+stu.getStname()+" " +stu.getPhone().getColor());
System.out.println(stu1.getStid()+" "+stu1.getStname()+" "+stu1.getPhone().getColor());
System.out.println(stu+" "+stu.getPhone());
System.out.println(stu1+" "+stu1.getPhone());
}
public static void main(String[] args) throws CloneNotSupportedException {
TestClone test= new TestClone();
test.testClone1();
//test.testClone2();
}
}
分享到:
相关推荐
NULL 博文链接:https://zzqrj.iteye.com/blog/572562
Java Clone(类的复制)实例代码 Java Clone(类的复制)实例代码
}3.、控制台,可以看到了改了复制出来的,也不会改变之前的4、浅复制 对象中引入对象,观察浅复制和深复制的区别理解:1、浅复制中加入对象,测试观察引出深复制2、
主要介绍了php5对象复制、clone、浅复制与深复制,结合实例形式详细分析了php5对象复制、clone、浅复制与深复制相关概念、原理、使用技巧与操作注意事项,需要的朋友可以参考下
List的深度复制 浅谈C#中List<T>对象的深度拷贝问题
微狗硬复制工具,查狗、读狗、写狗,密码清除。希望使用者发表经验,相互交流
下面小编就为大家带来一篇深入理解JavaScript中的对象复制(Object Clone)。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
浅复制是 Clone 方法的默认实现,它只是复制对象的引用,而不复制对象的值。例如,下面的代码: ```csharp public class A : ICloneable { public int i; public string str; public object Clone() { return ...
市面上最强的UMI微狗MicroDog硬复制备份工具,可以复制V4.0之前的所有版本。请勿用在非法用途,仅供个人学习研究之使用。 此工具只针对加密狗固件版本V4.0之前的所有版本,新版本V4。1无法使用,请知悉。 写入...
Clone 属性的相关内容 Clone 属性的相关内容
git clone 最新版 不多说上资源 好用测试ok git clong git clone 最新版 不多说上资源 好用测试ok git clong
深化理解JavaScript中的对象复制(Object Clone)_.docx
Clone10-EX-LV2
主要介绍了Java中的数组复制(clone与arraycopy)代码详解,本文并未全部介绍数组复制的几种方式,仅对clone和copy的相关内容进行了解析,具有一定参考价值,需要的朋友可以了解下。
jquery.clone
java中clone的详细用法,分浅拷贝和深拷贝,并分别有详细的实例介绍。从原理分析。
Minesweeper CLone 0.97 Saolei.net扫雷网,小门汉化 Men Shiyun Mine.exe 请自行下载MinesweeperClone_0.97.exe安装后使用
详细的描述了Java中 clone方法使用
通过明确控制应如何复制实例(限制字段或相关对象)以及唯一字段检测的显式控制来创建模型实例的副本。 聚酰亚胺 Python Django的 资料下载 依存关系 测试 漏洞 覆盖范围 代码质量 贡献者 代码风格 目录 从...