西红门模板网站建设,最简单的网站系统,WordPress 左边导航,国家信息网JAVA浅克隆和深克隆浅克隆#xff1a;被复制对象的所有变量和原来相同#xff0c;而所有的对其他对象的引用仍指向原对象。即如果复制的对象修改复制对象的变量#xff0c;原对象不会改变。而修改引用的对象#xff0c;二者均会发生改变。深复制(克隆)#xff1a;被复制对…JAVA浅克隆和深克隆浅克隆被复制对象的所有变量和原来相同而所有的对其他对象的引用仍指向原对象。即如果复制的对象修改复制对象的变量原对象不会改变。而修改引用的对象二者均会发生改变。深复制(克隆)被复制对象的所有变量都含有与原来的对象相同的值除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过来的新对象而不再是原有的那些被引用的对象。深克隆就是把所有对象多复制了一遍。public class Student implements Cloneable,Serializable {private String name;private int age;private Teacher teacher;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher teacher;}//浅复制public Object clone(){Object obj null;try {obj super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();return null;}return obj;}/* 深复制 */public Object deepClone() throws IOException, ClassNotFoundException {/* 写入当前对象的二进制流 */ByteArrayOutputStream bos new ByteArrayOutputStream();ObjectOutputStream oos new ObjectOutputStream(bos);oos.writeObject(this);/* 读出二进制流产生的新对象 */ByteArrayInputStream bis new ByteArrayInputStream(bos.toByteArray());ObjectInputStream ois new ObjectInputStream(bis);return ois.readObject();}}public class Teacher implements Serializable{private String tName;public Teacher() {super();}public Teacher(String tName) {super();this.tName tName;}public String gettName() {return tName;}public void settName(String tName) {this.tName tName;}}import java.io.IOException;public class Test {/*** param args*/public static void main(String[] args) throws ClassNotFoundException, IOException {Student stu new Student();stu.setAge(22);stu.setName(stu1);stu.setTeacher(new Teacher(Tea1));Student stu1 (Student) stu.clone();//浅复制stu1.getTeacher().settName(tea2);stu1.setAge(23);System.out.println(stu1.getTeacher().gettName() stu.getTeacher().gettName());System.out.println(stu1.getAge() stu.getAge());}}//浅复制stu1.getTeacher().gettName()的值和stu.getTeacher().gettName()相同被修改之后的值stu1.getAge()的值和stu.getAge()的值不同前者为23后者为22//深复制Student stu2 (Student) stu.deepClone();stu2.getTeacher().settName(tea3);stu2.setAge(23);System.out.println(stu2.getAge()” ”stu.getAge());System.out.println(stu2.getTeacher().gettName() stu.getTeacher().gettName());stu2.getAge()的值和stu.getAge()的值不同前者为23后者为22stu2.getTeacher().getName()的值和stu.getTeacher().getName()的的值不同前者为tea3后者为tea1