1.浅拷贝代码
package com.zsp.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @title: User
* @Author zsp
* @Date: 2022/9/30 0:37
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.zsp.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @title: Teacher
* @Author zsp
* @Date: 2022/11/11 18:41
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher implements Cloneable {
private String name ;
private Student student;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
@Override
protected Teacher clone() throws CloneNotSupportedException {
Teacher teacher = (Teacher) super.clone();
return teacher;
}
}
浅拷贝测试类:
package com.zsp.pojo;
/**
* @title: DemoTest
* @Author zsp
* @Date: 2022/11/11 18:44
* @Version 1.0
*/
public class DemoTest {
public static void main(String[] args) throws CloneNotSupportedException {
Student student = new Student(1, "张三");
Teacher teacher = new Teacher("王老师",student);
Teacher clone = teacher.clone();
System.out.println(teacher==clone); //false
System.out.println("--------------");
teacher.getStudent().setName("王五");
System.out.println(clone.getStudent().getName().equals(teacher.getStudent().getName()));
//true
System.out.println("---------------");
teacher.setName("方老师");
System.out.println(clone.getName().equals("teacher.getName()"));//false
System.out.println(teacher.getStudent()==clone.getStudent());//true
}
}
2.深拷贝代码
package com.zsp.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @title: User
* @Author zsp
* @Date: 2022/9/30 0:37
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Cloneable{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
protected Student clone() throws CloneNotSupportedException {
return (Student) super.clone();
}
}
package com.zsp.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @title: Teacher
* @Author zsp
* @Date: 2022/11/11 18:41
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher implements Cloneable {
private String name ;
private Student student;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
@Override
protected Teacher clone() throws CloneNotSupportedException {
Teacher teacher = (Teacher) super.clone();
teacher.student = student.clone();
return teacher;
}
}
深拷贝测试类
package com.zsp.pojo;
/**
* @title: DemoTest
* @Author zsp
* @Date: 2022/11/11 18:44
* @Version 1.0
*/
public class DemoTest {
public static void main(String[] args) throws CloneNotSupportedException {
Student student = new Student(1, "张三");
Teacher teacher = new Teacher("王老师",student);
Teacher clone = teacher.clone();
System.out.println(teacher==clone);//false
System.out.println("--------------");
teacher.getStudent().setName("王五");
System.out.println(clone.getStudent().getName().equals(teacher.getStudent().getName()));
//false
System.out.println("---------------");
teacher.setName("方老师");
System.out.println(clone.getName().equals(teacher.getName()));//false
System.out.println(teacher.getStudent()==clone.getStudent());//false
}
}
3.序列化实现深拷贝
//需实现序列化接口 Serializable
public Teacher deepClone() throws IOException, ClassNotFoundException {
Teacher teacher = null;
//字节数组缓冲区
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(byteArrayOutputStream);
oos.writeObject(this);
ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
ObjectInputStream ois =new ObjectInputStream(byteArrayInputStream);
return (Teacher) ois.readObject();
}