2012-07-11 91 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