美文网首页
1.关于Java深复制的例子

1.关于Java深复制的例子

作者: 未知的证明 | 来源:发表于2019-04-14 23:08 被阅读0次

这里解释一下,Java中的如果不重写clone()方法其实做的是浅复制,即将Primitive Type类型的数据clone下来,就是值复制,而引用不会复制,还是直接指向原来那个对象,并没有深复制。如果想做到深复制,必须实现Cloneable接口,重写clone()方法。从底到上都要实现clone(),每个引用都要重新new出一个对象。

package test;

public class Person implements Cloneable{
    private int age = 10;
    private String name = "liyuanfeng";

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    public Person() {
    }

    public Person(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

package test;

import thrift.generated.PersonService;

public class Professional implements Cloneable {

    private Person person = new Person();
    int age = 10;
    private String name = "zhangguijun";

    @Override
    protected Object clone() throws CloneNotSupportedException {
        Professional professional = null;
        professional = (Professional) super.clone();
        professional.person= (Person)person.clone();
        return professional;
    }

    public static void main(String[] args) throws CloneNotSupportedException {

        Professional professional = new Professional();
        Professional clone = (Professional) professional.clone();

        System.out.println(professional.getName().hashCode());
        System.out.println(clone.getName().hashCode());

        System.out.println(professional.getPerson().hashCode());
        System.out.println(clone.getPerson().hashCode());

        System.out.println(professional.getAge());
        System.out.println(clone.getAge());

        System.out.println(professional.hashCode());
        System.out.println(clone.hashCode());


    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

相关文章

  • 1.关于Java深复制的例子

    这里解释一下,Java中的如果不重写clone()方法其实做的是浅复制,即将Primitive Type类型的数据...

  • 2018-01-06 关于javascript的深拷贝浅拷贝 思

    目录: 什么是复制? 一个简单的浅复制 一个深复制的例子 普遍的深浅复制的几种实现方法 深拷贝,浅拷贝什么是复制?...

  • java 对象的拷贝

    拷贝:即复制 对象拷贝:即对象复制 java 对象拷贝分类:浅拷贝、深拷贝 java 对象的浅拷贝和深拷贝针对包含...

  • JavaScript(js)深复制的几种方法

    1.深复制deepClone 2.比较简洁深复制

  • Java复制

    概述 Java复制分为三类:直接赋值、浅拷贝和深拷贝。 Java复制是基于Object的clone()方法。 由此...

  • Java Clone

    Java深复制与浅复制 https://blog.csdn.net/accp_fangjian/article/d...

  • Java深复制和浅复制

    Java:假设有如下文件House.java 于是,我们可以这样操作:House house1 = new Hou...

  • Java深复制与浅复制

    在Java中,复制对象有两类方法,一种是浅复制,一种是深复制 先来一段浅复制的代码 一个类,只需要实现Clonea...

  • Objective-C中浅复制,深复制和归档那些事

    浅复制和深复制 关于浅复制和深复制,之前一直都没有系统的理一遍,今天就来做做总结归纳。什么是浅复制,什么是深...

  • 关于数组的深复制浅复制

    数组使用copy和MutableCopy复制: 1.不可变数组+copy=浅复制 2.不可变数组+mutableC...

网友评论

      本文标题:1.关于Java深复制的例子

      本文链接:https://www.haomeiwen.com/subject/kvbewqtx.html