java对象复制的问题 为什么我的对象复制老是无效,有对象A想得到其副本B,然后对A进行操作而不影响对象B,但我用clone()进行复制或用new一个对象后一个field一个field进行复制后,再对A进行操作,但总是会改变B,这是为什么,对象复制要注意什么没? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 确实是有子对象,但那些子对象不重要我要的只是基本类型的字段,是不是有子对象的都要进行深度clone()? 或则就连基本类型都不能被复制呢? 还有,A里有一个chra类型的二维数组 新对象下面的那个char[][]是clone()出来的吗? 代码贴出来看看 你没有深度克隆吧,你说“一个field一个field进行复制”的是指调用它们的clone方法,但是他们本身也是一个复杂对象,但是却没有做到深度克隆。深度克隆有时候很难做到,因为很多class不是你写的,比如ArrayList。很多时候我们对此无能为力,除非你所有的对象都是Serializable的,那么可以考虑用序列化/反序列化来模拟深度克隆 我要保存的信息主要就是那个char[][],对于它我没用特别处理,直接放在了类里了,我以为调用了clone()方法后数组会自己被复制,是这样的吗?,事实上我还不知道数组能不能用"clone()".楼上的能说说吗?也许问题就在这儿了,对于子类我也进行了深度过clone(),但还是没成功.最后我自己写了一个方法一个field一个field的,每一个field都进行了复制(之前没有全部都复制,只复制了有用的,发现不行),现在终于可以了,不过这样的效率是不如用clone()的吧?现在我想知道对于数组这样的东西怎么用clone()?呵呵~~^_^代码我想就不贴了,老长的东西,估计楼上的看了也会烦的.不过先谢了楼上的了. 我注意了,用自己写的方法可以复制了,但用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(),谢谢你的热心帮助.虽然你所说的我前面已经说过已经知道了,但还是谢了,现在问题已经解决了.谢了. 关于下列代码的内存分析 在linux下运行jar文件 struts导入外部的工程 用SWT如何 实现类似于eclipse中的欢迎界面 java 和c混合编程求助 一道google面试题的"标准答案" 很简单的一个问题,比较缓冲与非缓冲在性能上的差别 java如何实现:获得远程客户端的MAC ADDRESS? java中组件(component) 是什么,和类有什么概念上的区别 。 举手之劳,求office2000的注册码,急用! 哪里有jbuilder下载 一个关于软件编写中存储的问题,希望高手赐教!
你说“一个field一个field进行复制”的是指调用它们的clone方法,但是他们本身也是一个复杂对象,但是却没有做到深度克隆。深度克隆有时候很难做到,因为很多class不是你写的,比如ArrayList。很多时候我们对此无能为力,除非你所有的对象都是Serializable的,那么可以考虑用序列化/反序列化来模拟深度克隆
代码我想就不贴了,老长的东西,估计楼上的看了也会烦的.不过先谢了楼上的了.
先定义个抽象类
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();