在数组上克隆方法是深拷贝还是浅拷贝?

时间:2012-04-12 14:14:44

标签: java

我不确定以下内容是否会导致深拷贝或浅拷贝?

public void viewImages(final String[] instancesFilename) {

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

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

3 个答案:

答案 0 :(得分:14)

Java中的字符串是可以改变的(不能改变它们的值)。因此,复制字符串时,深拷贝和浅拷贝之间没有可检测到的差异。

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

哦,有趣的事实:无法使用克隆方法克隆字符串,因此如果您尝试使用克隆方法对字符串进行深层复制,则会出现CloneNotSupportedException。

答案 1 :(得分:2)

数组类也有copyOf方法。这通常是我用来创建数组副本的方法。继承人和所有差异的解释:http://forum.codecall.net/topic/49450-copying-arrays/

答案 2 :(得分:1)

这是一个有趣的article discussing using serialization to make deep copies

调用图中的对象确实需要支持序列化,但是在3层应用程序的许多业务类型中,必然存在这种情况。

本文提供了深度复制和浅拷贝的讨论,并附有一些图表。