Java数组克隆奇怪的行为
我正在尝试克隆我创建的名为 CSP 的自定义类的实例。我有一个名为 csp 的实例,我想创建一个名为 cspclone 的 csp 克隆。这是我用来执行此操作的方法:
CSP cspclone = new CSP((csp.x).clone(), (csp.d).clone(), (csp.c).clone()) ;
由于某种原因,虽然当我将 cspclone 传递给修改它的方法时,csp 也会被修改,就好像我忘记了 .clone() 函数一样,但我没有!为什么会出现这种情况?!
I'm trying to clone an instance of a custom class I made called CSP. I have one instance called csp and I want to make a clone of csp called cspclone. Here is what I'm using to do that:
CSP cspclone = new CSP((csp.x).clone(), (csp.d).clone(), (csp.c).clone());
For some reason though when I pass cspclone to a method that modifies it csp gets modified also as if I forgot the .clone() functions but I didn't! Why is this happening?!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
重写
CSP
中的clone
方法:然后你可以这样做:
Override the
clone
method inCSP
:Then you can do:
如果您的数组类型属性使用 System.arraycopy
If your properties of array type use System.arraycopy
根据 http://download .oracle.com/javase/1.3/docs/api/java/lang/Object.html#clone%28%29
您可能必须覆盖对象中的clone方法和
clone()
一个引用类型属性(即执行深复制操作)。According to http://download.oracle.com/javase/1.3/docs/api/java/lang/Object.html#clone%28%29
You might have to override the clone method and
clone()
a reference type attribute within the object (i.e., perform deep copy operation).要解决您的问题,您需要深度克隆。默认的克隆方法执行浅复制。请参阅 Object.clone() 。
这里有一些方法。都有优点和缺点。
以下是有关克隆的其他几个 stackoverflow 讨论。
To solve your problem you need deep cloning. The default clone method does a shallow copy. See Object.clone().
Here are some approaches. All have advantages and drawbacks.
Here are several other stackoverflow discussions of cloning.