Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阵列上的克隆方法是深层拷贝还是浅层拷贝?_Java - Fatal编程技术网

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克隆方法将创建一个新的独立数组,其中包含对相同字符串对象的新引用。最有可能是你想要/需要的。但新引用将指向与原始数组相同的字符串对象。但我无法想象为什么这会成为一个问题。