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

  • 相关阅读:
    一篇带你了解私有仓库 Harbor 的搭建
    docker优化之Cgroup资源配置
    WARNING: IPv4 forwarding is disabled. Networking will not work.
    Docker镜像、私有仓库
    了解Docker Consul 工具 ,一篇就够了
    运维必备之日志分析工具ELK
    mysql5.6与5.7版本的区别
    Docker Compose-容器编排工具
    SQL中对于增加和删除“约束”的语句
    python3-基础5
  • 原文地址:https://www.cnblogs.com/balfish/p/6306073.html
Copyright © 2011-2022 走看看