2012-04-12 70 views
5

我不确定以下内容是否会导致深度或浅度复制?对数组的深度或浅度副本克隆方法吗?

public void viewImages(final String[] instancesFilename) { 

    String[] instances = (String[])instancesFilename.clone();  
} 

是否有一个简单快捷的方法来深度复制字符串数组?

回答

14

Java中的字符串是不可变的(无法更改它们的值)。因此,复制字符串时,深度和浅度副本之间没有可检测到的差异。

只是为了进一步参考:副本会很浅,但这不应该是一个问题,因为字符串是不可变的。

哦,有趣的事实:字符串不能用克隆方法克隆,因此如果您尝试使用克隆方法执行字符串的深层副本,您将得到一个CloneNotSupportedException。

+0

作者要求复制'String []',而不是'String'。 'instancesFilename'的元素可以稍后从外部改变,所以OP想要创建数组的副本。 – 2012-04-12 14:19:15

+0

这是*可检测*(是参考相同),但如果你正确使用字符串,它不应该*显着*。 – 2012-04-12 14:19:21

+0

@PhilippReichart:但是OP已经在执行一个克隆 - “深层拷贝”与“浅拷贝”在这种情况下只能是关于字符串是否被克隆的问题 - 正如这个回答所说的那样,它几乎总是不重要的。 – 2012-04-12 14:20:12