站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题java对象复制的问题

java对象复制的问题

摘要: java对象复制的问题


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


都一个晚上了为什么没人回我,555~~~~~


我是在网上找了,但找不到解决方法才提问的,有人肯帮帮我吗?


你的A对象里面是否包含有子对象,如果有的话得进行深拷贝


确实是有子对象,但那些子对象不重要我要的只是基本类型的字段,

是不是有子对象的都要进行深度clone()? 或则就连基本类型都不能被复制呢?


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


不对,我用自己写的方法一个一个字段复制也不行啊,到底怎么了?
数组也是两循环一个原素一个原素复制的


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


你没有深度克隆吧,
你说“一个field一个field进行复制”的是指调用它们的clone方法,但是他们本身也是一个复杂对象,但是却没有做到深度克隆。

深度克隆有时候很难做到,因为很多class不是你写的,比如ArrayList。很多时候我们对此无能为力,除非你所有的对象都是Serializable的,那么可以考虑用序列化/反序列化来模拟深度克隆


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



System.arraycopy();
???


注意深层拷贝,还是浅层拷贝


楼上说得对!!


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


给你个例子参考
先定义个抽象类
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();


激烈,虽然不懂,顶一下。


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

谢了.


↑返回目录
前一篇: 一个关于软件编写中存储的问题,希望高手赐教!
后一篇: read和write的问题