zoukankan      html  css  js  c++  java
  • 深拷贝 & 浅拷贝

    浅拷贝:

    class Professor {
        String name;
        int age;
    
        public Professor(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        protected Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    }
    
    class Student implements Cloneable {
        String name;
        int age;
        Professor p;
    
        public Student(String name, int age, Professor p) {
            this.name = name;
            this.age = age;
            this.p = p;
        }
    
        @Override
        protected Object clone() throws CloneNotSupportedException {
            Student s = (Student) super.clone();
    //        s.p = (Professor) p.clone();
            return s;
        }
    }
    
    public class Main {
        public static void main(String[] args) throws CloneNotSupportedException {
            Professor p = new Professor("教授1", 50);
            Student s1 = new Student("学生1", 18, p);
            Student s2 = (Student) s1.clone();
    
            s2.p.name = "教授2";
            s2.p.age = 30;
            s2.name = "学生2";
            s2.age = 25;
            System.out.println(s1.name + " " + s1.age + " " + s1.p.name + " " + s1.p.age);
        }
    }

    结果: 学生1 18 教授2 30

    深拷贝:

    class Professor implements Cloneable {
        String name;
        int age;
    
        public Professor(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        protected Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    }
    
    class Student implements Cloneable {
        String name;
        int age;
        Professor p;
    
        public Student(String name, int age, Professor p) {
            this.name = name;
            this.age = age;
            this.p = p;
        }
    
        @Override
        protected Object clone() throws CloneNotSupportedException {
            Student s = (Student) super.clone();
            s.p = (Professor) p.clone();
            return s;
        }
    }
    
    public class Main {
        public static void main(String[] args) throws CloneNotSupportedException {
            Professor p = new Professor("教授1", 50);
            Student s1 = new Student("学生1", 18, p);
            Student s2 = (Student) s1.clone();
    
            s2.p.name = "教授2";
            s2.p.age = 30;
            s2.name = "学生2";
            s2.age = 25;
            System.out.println(s1.name + " " + s1.age + " " + s1.p.name + " " + s1.p.age);
        }
    }

    结果: 学生1 18 教授1 50

    序列化形式深拷贝:

    class Professor implements Serializable {
        private static final long serialVersionUID = 1286716519490813020L;
        String name;
        int age;
    
        public Professor(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
    
    class Student implements Serializable {
        private static final long serialVersionUID = -547004870369127943L;
        String name;
        int age;
        Professor p;
    
        public Student(String name, int age, Professor p) {
            this.name = name;
            this.age = age;
            this.p = p;
        }
    
        public Object deepClone() throws IOException, ClassNotFoundException {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
            objectOutputStream.writeObject(this);
    
            ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()));
            return objectInputStream.readObject();
        }
    }
    
    public class Main {
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            Professor p = new Professor("教授1", 50);
            Student s1 = new Student("学生1", 18, p);
            Student s2 = (Student) s1.deepClone();
    
            s2.p.name = "教授2";
            s2.p.age = 30;
            s2.name = "学生2";
            s2.age = 25;
            System.out.println(s1.name + " " + s1.age + " " + s1.p.name + " " + s1.p.age);
        }
    }

    结果: 学生1 18 教授1 50

  • 相关阅读:
    Sublime Text 3 3126 注册码
    修改bootstrap 的全局样式,bootstrap 3.0 是由html5和CSS 3组成的
    mysql-sql高级应用
    MySQL 主键冲突,无法插入数据
    jquery加载页面的方法(页面加载完成就执行)
    Jquery怎么获取select选中项 自定义属性的值
    使用Yii2中dropdownlist实现地区三级联动的例子
    Yii2中省市三级联动(栏目联动)
    [HNOI2009] 梦幻布丁
    [CJOJ2410]数列操作d
  • 原文地址:https://www.cnblogs.com/balfish/p/6306073.html
Copyright © 2011-2022 走看看