1、深拷贝就是一种将一个对象完全复制一份给其他的对象,这两个对象的地址不同,当把这两个对象中的其中一个信息修改,也不会影响另一个对象的值。
深拷贝的代码:
1、拷贝对象类中的自定义引用类的创建:
package com.seccen.homework.day7;
public class Addr implements Cloneable{
private String addr;
public Addr(String addr) {
this.addr = addr;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Addr{" +
"addr='" + addr + '\'' +
'}';
}
}
2、拷贝对象中的类的创建
package com.seccen.homework.day7;
public class User implements Cloneable{
private int no;
private String name;
private char sex;
private Addr addr;
public User() {
}
public User(int no, String name, char sex, Addr addr) {
this.no = no;
this.name = name;
this.sex = sex;
this.addr = addr;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public Addr getAddr() {
return addr;
}
public void setAddr(Addr addr) {
this.addr = addr;
}
@Override
public String toString() {
return "User{" +
"no=" + no +
", name='" + name + '\'' +
", sex=" + sex +
", addr=" + addr +
'}';
}
@Override
protected Object clone() throws CloneNotSupportedException {
User user = (User)super.clone();
user.addr = (Addr) addr.clone();
return user;
}
}
3、拷贝的实现
package com.seccen.homework.day7;
public class CloneTest {
public static void main(String[] args) {
User u1 = new User(1,"张三",'男',new Addr("江西"));
try {
User u2 = (User) u1.clone();
u2.setAddr(new Addr("北京"));
System.out.println(u1);
System.out.println(u2);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}