2012-07-11 90 views
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(); 
    } 
+0

能否请你介绍我们的'它不会work'概念? – 2012-07-11 15:52:28

+0

这里有两个问题: #为什么我的代码不工作? #什么是深度复制? 我建议你把这些分成两个问题。 – Dancrumb 2012-07-11 15:53:40

+0

你看过http://en.wikipedia.org/wiki/Object_copy#Deep_copy – MarcoS 2012-07-11 15:54:05

回答

3

深层副本是对象的副本,除了复制对象的各个字段,也经历所有这些领域的参考,并将它们复制其他对象。这确保了如果通过一个副本修改其中一个对象,另一个副本不受影响。

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

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

1

你的代码是不工作的原因是该行:

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

resultString秒的数组,但你试图实例化一个String。 JVM抛出的错误应该已经将你指向这条线。

但是,这与深拷贝无关。对于这一点,看看

Deep copy, shallow copy, clone