首页 > 其他 > 详细

Object类clone方法

时间:2019-07-26 09:52:47      阅读:55      评论:0      收藏:0      [点我收藏+]

Object中clone()方法是protected的,是浅拷贝,要使用clone方法,要重写它,只有实现了implements Cloneable才可以调用该方法,否则会抛出CloneNotSupportedException异常。

@Override
    public Object clone(){
        Object o = null;
        try {
            o = super.clone();
        }catch (CloneNotSupportedException e){
            e.printStackTrace();
        }
//        Person p = (Person) o;
//        p.book = (Book)p.getBook().clone();              //放开这两段即为深拷贝的用法
        return o;
    }

在我们需要复制对象的时候常用的三种方式

public static void main(String[] args){
Book b = new Book("java");
Person p = new Person("wt",b);
Person p1 = new Person(p);
Person p2 = (Person) p.clone();
b.setBookName("js");
p.setName("zjj");
System.out.println("P:"+p);
System.out.println("P1:"+p1);
System.out.println("P2:"+p2);
}

当clone使用浅拷贝(即不放开那两段)时,只拷贝对象不包含对对象引用的对象的拷贝:

P:{name:zjj, book:{bookName:js}}            
P1:{name:wt, book:{bookName:js}}      //不论是p1还是p2,基本类型的数值是直接拷贝值的,但是引用类型的对象却是拷贝地址的
P2:{name:wt, book:{bookName:js}}      //这样一旦p的原始值引用的对象改变,浅拷贝后的对象也会随之变化

当clone使用深拷贝(即放开那两段)时:

P2:{name:wt, book:{bookName:java}}      //深拷贝时,连对象中的对象都进行的是值拷贝,所以原始值的引用对象改变不会影响它

 

Object类clone方法

原文:https://www.cnblogs.com/sycamore0802/p/11247877.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!