细说java对象的浅复制和深复制
来源:互联网 发布:caxa机械画图软件 编辑:程序博客网 时间:2024/05/20 17:42
浅复制和深复制的区别
浅复制:仅复制它自己这个对象,不复制它所引用的对象。
深复制:复制要复制的对象和它所引用的对象。
实现浅复制和深复制,主要是使用cloneable接口的clone方法,还是比较简单的,不多说了,直接上代码。
浅复制(shallow clone)
public class Husband implements Cloneable {private int idNumber;private String name;public Husband(int idNumber, String name) {super();this.idNumber = idNumber;this.name = name;}public int getIdNumber() {return idNumber;}public void setIdNumber(int idNumber) {this.idNumber = idNumber;}public String getName() {return name;}public void setName(String name) {this.name = name;}//这里一定要public修饰,不要沿用Cloneable接口的protectedpublic Object clone() throws CloneNotSupportedException {// TODO Auto-generated method stubreturn super.clone();}}
public class ShallowCloneClient {public static void main(String[] args) throws CloneNotSupportedException {Husband husband = new Husband();husband.setIdNumber(100);husband.setName("张三");//拷贝后husband和husband2是两个对象,两个对象,两个对象……Husband husband2 = (Husband)husband.clone();System.out.println(husband2.getIdNumber() + " " + husband2.getName());}}
深复制(deep clone)
public class Husband implements Cloneable {private int idNumber;private String name;private Wife wife;public int getIdNumber() {return idNumber;}public void setIdNumber(int idNumber) {this.idNumber = idNumber;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Wife getWife() {return wife;}public void setWife(Wife wife) {this.wife = wife;}//这里一定要public修饰,不要沿用Cloneable接口的protectedpublic Object clone() throws CloneNotSupportedException {// TODO Auto-generated method stubHusband husband2 = (Husband) super.clone();husband2.setWife((Wife)husband2.getWife().clone());return husband2;}}
public class Wife implements Cloneable {private int idNumber;private String name;public int getIdNumber() {return idNumber;}public void setIdNumber(int idNumber) {this.idNumber = idNumber;}public String getName() {return name;}public void setName(String name) {this.name = name;}//这里一定要public修饰,不要沿用Cloneable接口的protectedpublic Object clone() throws CloneNotSupportedException {// TODO Auto-generated method stubreturn super.clone();}}
public class DeepCloneClient {public static void main(String[] args) throws CloneNotSupportedException {Husband husband = new Husband();husband.setIdNumber(200);husband.setName("李四");Wife wife = new Wife();wife.setIdNumber(300);wife.setName("小花");husband.setWife(wife);Husband husband2 = (Husband) husband.clone();System.out.println(husband2.getIdNumber() + " " + husband2.getName());}}
DeepCloneClinet运行结果:
200 李四
0 0
- 细说java对象的浅复制和深复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制详解
- Java对象克隆(复制):深复制和浅复制
- 对象的深复制和浅复制
- java对象的复制,浅复制、深复制
- java的深复制和浅复制
- java Map 复制和对象的复制
- java对象深层复制和浅复制
- 【Java】Java中对象的深复制(深克隆)和浅复制(浅克隆)
- Java对象深复制、浅复制
- Java对象深复制与浅复制
- Java对象的深复制与浅复制
- hadoop的PID路径问题
- 如何理解JS中的this指向问题
- Comparator接口和Comparable接口的区别
- 分数加减法
- Android双屏驱动Service架构实现
- 细说java对象的浅复制和深复制
- 如何写toolbar
- 键盘Key Code对照表和 ASCII 字符集
- Java基本六:代理
- caffe学习资料
- 第八周—C语言 穷举法(换分币问题)
- JEECG弹出表单调用列表刷新
- Java 访问修饰符
- 通信协议——Http、TCP、UDP(个人理解)