码迷,mamicode.com
首页 > 编程语言 > 详细

Java浅克隆和深克隆

时间:2018-01-02 01:26:49      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:.com   深克隆   cte   logs   body   http   turn   其他   pos   

什么是浅克隆和深克隆?

克隆顾名思义就是,参照一个东西再做一个出来

浅克隆:直接复写Object的clone()方法,默认情况下8种基本数据类型和String都会进行深克隆,另外的其他引用类型为浅克隆(浅克隆:引用指向的是同一个对象)
深克隆:浅克隆中那另外的其他引用类型都让其变为深克隆

引用类型图解 技术分享图片

浅克隆

public class Main {

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

        A a = new A();
        A b = (A)a.clone();
        b.str = "....";
        b.i = 1000;

        System.out.println(a == b); //false 表示地址并不一样,不是同一个引用
        System.out.println(a.p == b.p); //true 表示引用类型只想的是同一个引用
        System.out.println(a.str == b.str); //false 表示地址并不一样,不是同一个引用
        System.out.println(a.i == b.i);    //false 表示地址并不一样,不是同一个引用
    }

}

//克隆对象需要实现Cloneable接口
class A implements Cloneable {
    Person p = new Person("谭迪");
    String str = "hehe";
    int i = 100;

    //浅克隆:该方法来自于Object
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

class Person{
    String name;
    public Person(String name) {
        this.name = name;
    }
}

深克隆

public class Main {

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

        A a = new A();
        A b = (A)a.clone();

        b.str = "....";
        b.i = 1000;
        
        System.out.println(a == b);         //false
        System.out.println(a.p == b.p);     //flase
        System.out.println(a.str == b.str); //flase
        System.out.println(a.i == b.i);     //flase
    }

}

//克隆对象需要实现Cloneable接口
class A implements Cloneable {
    Person p = new Person("小明");
    String str = "hehe";
    int i = 100;

    //深克隆:该方法来自于Object
    @Override
    protected A clone() throws CloneNotSupportedException {
        A a = (A)super.clone();
        a.p = (Person)p.clone();
        return a;
    }
}

class Person implements Cloneable{
    String name;
    public Person(String name) { this.name = name; }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

Java浅克隆和深克隆

标签:.com   深克隆   cte   logs   body   http   turn   其他   pos   

原文地址:https://www.cnblogs.com/tandi19960505/p/8169504.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!