为什么我的对象复制老是无效,有对象A想得到其副本B,然后对A进行操作而不影响对象B,但我用clone()进行复制或用new一个对象后一个field一个field进行复制后,再对A进行操作,但总是会改变B,这是为什么,对象复制要注意什么没?

解决方案 »

  1.   

    确实是有子对象,但那些子对象不重要我要的只是基本类型的字段,是不是有子对象的都要进行深度clone()? 或则就连基本类型都不能被复制呢?
      

  2.   

    还有,A里有一个chra类型的二维数组
      

  3.   

    新对象下面的那个char[][]是clone()出来的吗?  代码贴出来看看
      

  4.   

    你没有深度克隆吧,
    你说“一个field一个field进行复制”的是指调用它们的clone方法,但是他们本身也是一个复杂对象,但是却没有做到深度克隆。深度克隆有时候很难做到,因为很多class不是你写的,比如ArrayList。很多时候我们对此无能为力,除非你所有的对象都是Serializable的,那么可以考虑用序列化/反序列化来模拟深度克隆
      

  5.   

    我要保存的信息主要就是那个char[][],对于它我没用特别处理,直接放在了类里了,我以为调用了clone()方法后数组会自己被复制,是这样的吗?,事实上我还不知道数组能不能用"clone()".楼上的能说说吗?也许问题就在这儿了,对于子类我也进行了深度过clone(),但还是没成功.最后我自己写了一个方法一个field一个field的,每一个field都进行了复制(之前没有全部都复制,只复制了有用的,发现不行),现在终于可以了,不过这样的效率是不如用clone()的吧?现在我想知道对于数组这样的东西怎么用clone()?呵呵~~^_^
    代码我想就不贴了,老长的东西,估计楼上的看了也会烦的.不过先谢了楼上的了.
      

  6.   

    我注意了,用自己写的方法可以复制了,但用clone()还不行,问题应该是那个char[][],这个要怎么用clone()呢?
      

  7.   

    给你个例子参考
    先定义个抽象类
    public abstract class AbstractSpoon implements Cloneable

      String spoonName;   public void setSpoonName(String spoonName) {this.spoonName = spoonName;}
      public String getSpoonName() {return this.spoonName;}  public Object clone() 
      {
        Object object = null;
        try {
          object = super.clone();
        } catch (CloneNotSupportedException exception) {
          System.err.println("AbstractSpoon is not Cloneable");
        }
        return object;
      }
    }
    继承
    public class SoupSpoon extends AbstractSpoon

      public SoupSpoon()
      {
        setSpoonName("Soup Spoon"); 
      }
    }
    使用
    AbstractSpoon spoon = new SoupSpoon();
    AbstractSpoon spoon2 = spoon.clone();
      

  8.   

    meilvin(),谢谢你的热心帮助.虽然你所说的我前面已经说过已经知道了,但还是谢了,现在问题已经解决了.谢了.