ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
浅克隆是指:当参考 A 对象复制 B 对象时,A 对象中的基本数据类型和 String 类型复制是没有问题的,但是如果 A 对象中有一个引用对象 C,则复制 A 的时候,是复制不到 C 对象的,而仅仅是复制了 C 对象的引用。 <br/> 实现浅克隆的步骤如下: **1. 两个实体类** ```java @Data @NoArgsConstructor @AllArgsConstructor public class Grade implements Cloneable { private String name; } ``` ```java @Data @NoArgsConstructor @AllArgsConstructor public class Student implements Cloneable { private String name; private int age; /** * 在 Student 里面放一个 Grade 引用对象 */ private Grade grade; /** * 重写 Object 的 clone 方法来复制 Student 自己 */ @Override public Student clone() throws CloneNotSupportedException { //克隆Student Student student = (Student) super.clone(); return student; } } ``` **2. 测试** ```java @Test public void shallow() throws CloneNotSupportedException { Student stu01 = new Student("张三", 18, new Grade("大一")); //复制stu01给stu02 Student stu02 = stu01.clone(); //结果输出为 false,说明复制成功,得到了两个独立的实例 System.out.println(stu01 == stu02); /* 那么下面来看一下对于引用对象 Grade 是否复制成功 */ //stu01.Grade.name:大一 System.out.println("stu01.Grade.name:" + stu01.getGrade().getName()); //改变stu02中的Grade对象 stu02.getGrade().setName("大二"); //stu02.Grade.name:大二 System.out.println("stu02.Grade.name:" + stu02.getGrade().getName()); //stu01.Grade.name:大二 System.out.println("stu01.Grade.name:" + stu01.getGrade().getName()); } ``` 由上面测试的结果看出,拷贝一份`stu01`给`stu02`之后,对`stu02`的引用对象 Grade 做修改后,`stu01`的 Grade 也被修改了,说明引用对象 Grade 并没有复制成功,这就是浅克隆。