JAVA 中浅拷贝与深拷贝有什么区别?具体该怎么处理

解决方案 »

  1.   

    对类以及需要复制的成员对象实现Clonable接口,或者用序列化 可以深拷贝
    否则只能浅拷贝了吧
      

  2.   

    浅拷贝就是仅仅对成员的引用进行拷贝。深拷贝就是对成员再次进行浅拷贝
    比如:
    class A{
    private String str1;public getStr1{
        return str1;
    }
    ...
    }class B{
        private String str2;
        private A a;    public getStr1{
            return str1;
        }    public getA{
            return a;
        }
        ...
    }B obj1 = new B();
    obj1.setStr2 = "123";
    obj1.getA.setStr1 = "456";B obj2 = obj1.浅拷贝.
    obj2.getA.setStr1 = "789";
    此时obj1.getA.getstr1 = "789".//因为引用的是同一对象
    如果是深拷贝
    obj2.getA.setStr1 = "789";
    此时obj1.getA.getstr1 = "456".//因为此时obj2中a为新对象.
      

  3.   

    只要你调用super.clone()就能实现浅拷贝。
    但如果你copy的对象中还包含其他的对象,这个时候浅拷贝就不行了。
    只能重写clone()方法,自己写代码实行了
      

  4.   

    老师给你们留了作业,你们班只有小A一个人会写,其他人都需要copy他的作业。如果你们都是通过浅拷贝来完成作业,那么就相当与“在你需要的时候,小A会把作业借给你”。
    例如,老师对小B说“去把你的作业拿来给我看看”,小B赶快找小A借作业给老师看。老师又要看小C的作业,小C也只能找小A借过来应付老师。总之老师如果一个一个的检查作业,你们都能应付,因为你们只有一本作业互相借着看一下就OK了。如果老师说“全班把作业一起交上来”,那你们就完蛋了。深拷贝就是每个人都实实在在的抄了一份作业,每个人的作业都是自己抄来的,所以老师收全班的作业你们也不怕,要多少本就给他多少本,呵呵。
      

  5.   

    andycpp(幻瞳) 的比喻非常好
      

  6.   

    andycpp(幻瞳) 的比喻非常好
    我也赞同!!!