假如定义了一个Test类,里面只有一个name属性。
    Test test1=new Test(“txg”);
    Test test2=test1;
    这样test2也会得到test1的name值,那java为什么还要有clone()呢?

解决方案 »

  1.   

    你这个不是复制对象,你这是复制了一个引用。
    Test test1=new Test(“txg”);有几个对象??一个是test1引用,  另一个是:new Test(“txg”),后者才是真正的对象。  现在test1指向后面这个对象,你这么操作,只是定义了一个test2也指向这个对象,所以内存中还是只有一个对象。
      

  2.   

    实现cloneable接口以后,你用clone方法,得到的是内存中有两个完全不同的对象。。只是属性的值相同罢了。
    如果你不信: 你用你的程序。。
    用test2修改,name值,然后test1打印一下name值。。发现是不是也变了。但如果你用clone方法则不会。拷贝分为:深拷贝和浅拷贝。 自己google去查吧。
      

  3.   

    假如你直接引用 对象
    当你改变test2 中的数据 test1会随之改变 因为你实际是操作了一块内存变量
    而我们实际上有时候不希望他们互相影响
    所以复制了一份数据 重新分配内存
    不过对于大数据量 千万有谨慎使用 有可能会内存不够
      

  4.   

    明白了,哈哈
    http://blog.csdn.net/txg703003659/article/details/6622885
      

  5.   

    http://blog.csdn.net/txg703003659/article/details/6622885