Java 阵列上的克隆方法是深层拷贝还是浅层拷贝?
我不确定以下内容是否会导致深度复制或浅复制Java 阵列上的克隆方法是深层拷贝还是浅层拷贝?,java,Java,我不确定以下内容是否会导致深度复制或浅复制 public void viewImages(final String[] instancesFilename) { String[] instances = (String[])instancesFilename.clone(); } 有没有一种简单快速的方法来深度复制字符串数组?Java中的字符串是不可更改的(不能更改其值)。因此,在复制字符串时,深拷贝和浅拷贝之间没有明显的区别 进一步参考:副本将很浅,但这不应该是一个问题,因
public void viewImages(final String[] instancesFilename) {
String[] instances = (String[])instancesFilename.clone();
}
有没有一种简单快速的方法来深度复制字符串数组?Java中的字符串是不可更改的(不能更改其值)。因此,在复制字符串时,深拷贝和浅拷贝之间没有明显的区别 进一步参考:副本将很浅,但这不应该是一个问题,因为字符串是不可替换的
哦,还有一个有趣的事实:字符串不能用clone方法克隆,所以如果你试图用clone方法对字符串进行深度复制,你会得到CloneNotSupportedException。数组类也有copyOf方法。这通常是我用来创建阵列副本的方法。以下是所有差异的解释:这里有一个有趣的例子 调用图中的对象确实需要支持序列化,但是在许多三层应用程序的业务类型中,这是必要的
这篇文章用一些图表讨论了深度复制和浅层复制。作者要求复制
String[]
,而不是String
。instancesFilename
的元素可以稍后从外部更改,因此OP希望创建数组的副本。它是可检测的(引用是否相同),但是如果您正确使用字符串,它应该没有意义。@PhilippReichart:但是OP已经在执行克隆-“深度复制”与“浅层复制”在这种情况下,只能考虑字符串是否被克隆——正如这个答案所说,这几乎总是不重要的。。。。但是字符串可以是intern()
'd,这将是一种浅拷贝:\n克隆方法将创建一个新的独立数组,其中包含对相同字符串对象的新引用。最有可能是你想要/需要的。但新引用将指向与原始数组相同的字符串对象。但我无法想象为什么这会成为一个问题。