1

自从我们的教授告诉我们这样做以来,我正在尝试进行深度复制。他给了我们一段代码,但是一旦我在netbeans中输入它,它就不起作用了......

有人可以通过这些代码帮我解释深拷贝的概念吗?

    int i;
    String [] original = {"Aref","Ali","Emad","Sami"};
    String [] result = new String(original.length);      
    for(i=0;i<original.length;i++){
        result[i] = (String) original[i].clone();
    }
4

2 回答 2

3

深层副本是对象的副本,除了复制对象的各个字段外,还遍历这些字段引用的所有其他对象并复制它们。这确保了如果其中一个对象通过一个副本被修改,另一个副本不受影响。

这段代码original首先创建一个新数组,然后遍历它,复制数组中引用的每个字符串,并将对新复制的字符串的引用放入数组的新副本中,从而进行深层复制。或者至少,如果不是因为其他人提到的错字,它会这样做。

请注意,在这种特殊情况下这是没有意义的,因为 Java 字符串是不可变的,因此不存在修改引用对象的危险。

于 2012-07-11T15:53:38.383 回答
1

您的代码不起作用的原因是以下行:

String [] result = new String(original.length);  

result是一个Strings 数组,但您试图实例化一个String. JVM 抛出的错误应该已将您指向这一行。

但是,这与深度复制无关。为此,请看

深拷贝、浅拷贝、克隆

于 2012-07-11T15:55:20.523 回答