我不确定以下内容是否会导致深度或浅度复制?对数组的深度或浅度副本克隆方法吗?
public void viewImages(final String[] instancesFilename) {
String[] instances = (String[])instancesFilename.clone();
}
是否有一个简单快捷的方法来深度复制字符串数组?
我不确定以下内容是否会导致深度或浅度复制?对数组的深度或浅度副本克隆方法吗?
public void viewImages(final String[] instancesFilename) {
String[] instances = (String[])instancesFilename.clone();
}
是否有一个简单快捷的方法来深度复制字符串数组?
Java中的字符串是不可变的(无法更改它们的值)。因此,复制字符串时,深度和浅度副本之间没有可检测到的差异。
只是为了进一步参考:副本会很浅,但这不应该是一个问题,因为字符串是不可变的。
哦,有趣的事实:字符串不能用克隆方法克隆,因此如果您尝试使用克隆方法执行字符串的深层副本,您将得到一个CloneNotSupportedException。
数组类也有copyOf方法。这通常用于创建数组副本。继承人和所有差异的解释:http://forum.codecall.net/topic/49450-copying-arrays/
这是一个有趣的article discussing using serialization to make deep copies。
调用图中的对象确实需要支持序列化,但是在3层应用程序的许多业务类型中,必须存在。
本文提供了有关深度复制和浅图复制的讨论。
作者要求复制'String []',而不是'String'。 'instancesFilename'的元素可以稍后从外部改变,所以OP想要创建数组的副本。 – 2012-04-12 14:19:15
这是*可检测*(是参考相同),但如果你正确使用字符串,它不应该*显着*。 – 2012-04-12 14:19:21
@PhilippReichart:但是OP已经在执行一个克隆 - “深层拷贝”与“浅拷贝”在这种情况下只能是关于字符串是否被克隆的问题 - 正如这个回答所说的那样,它几乎总是不重要的。 – 2012-04-12 14:20:12