细说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
原创粉丝点击