深拷贝:做的拷贝更深,包括对象里的对象
浅拷贝:只将对象里的属性拷贝,至于里面的对象,实际上拷贝的是指针
package 深浅拷贝;
/**
* @Author wuyifan
* @Date 2024/3/25 20:11
* @Version 1.0
*/
public class shallow_copy {
public static void main(String[] args) {
Student stu1 = new Student();
stu1.intrest = new Dolike();
stu1.intrest.like = "paper";
stu1.name = "John";
stu1.age = 20;
Student stu2 = stu1.clone();
stu2.name = "Bob";
stu2.age = 22;
//发现浅拷贝这里stu1的intrest也会改变
stu2.intrest.like = "game";
}
class Dolike{
public String like;
}
class Student implements Cloneable {
String name;
Integer age;
Dolike intrest;
public Student clone() {
try {
return (Student) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}
package 深浅拷贝;
/**
* @Author wuyifan
* @Date 2024/3/25 20:21
* @Version 1.0
*/
public class deep_copy {
public static void main(String[] args) {
teacher stu1 = new teacher();
stu1.name = "John";
stu1.scope = new Scope();
stu1.scope.level = 1;
teacher stu2 = stu1.clone();
stu2.name = "Bob";
//深拷贝发现stu1里的scope对象未发生改变
stu2.scope.level = 2;
}
class Scope {
Integer level;
}
class teacher implements Cloneable{
String name;
Scope scope;
public teacher clone(){
teacher cloned;
try {
cloned = (teacher) super.clone();
cloned.scope = new Scope();
cloned.scope.level = this.scope.level;
return cloned;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}