2014-03-29 36 views
0

嗨我試圖設計一種測試方式,如果複製構造函數是深層或淺層副本。我已經提出了以下內容。它會正常工作嗎?淺拷貝的輸出是淺這是測試淺層還是深層拷貝的適當方法?

Test1 

深輸出

Test1 
Test1 

輸出。

在我的腦海中,這是有道理的,因爲它在深拷貝中沒有被複制到第二個實例。

public class DeepAndShallowCopyConstructor { 

public String Stringtest =""; 

public DeepAndShallowCopyConstructor(){ 
} 

//Deep 
public DeepAndShallowCopyConstructor(DeepAndShallowCopyConstructor other){ 
DeepAndShallowCopyConstructor test = new DeepAndShallowCopyConstructor(); 
this.Stringtest = test.Stringtest; 
} 

// //Shallow 
// public Testing(Testing other){ 
//  this.Stringtest = other.Stringtest; 
// } 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    DeepAndShallowCopyConstructor test1 = new DeepAndShallowCopyConstructor(); 
    test1.setStringtest("test1"); 
    System.out.println(test1.getStringtest()); 

    DeepAndShallowCopyConstructor test2 = new DeepAndShallowCopyConstructor(test1); 
    System.out.println(test2.getStringtest()); 
} 

public String getStringtest() { 
    return Stringtest; 
} 

public void setStringtest(String stringtest) { 
    Stringtest = stringtest; 
} 
} 
+0

我知道他們說在Java中名字應該很長,但我認爲你會嚴重地過度使用它,以至於代碼不可讀。另外,'Stringtest'絕對不應該有大寫字母S,它不是一個類型名稱。另外..我已經讀了幾次,仍然沒有理解你的目標。 – MightyPork

回答

0

我想在這裏你的問題規定:

public DeepAndShallowCopyConstructor(DeepAndShallowCopyConstructor other){ 
DeepAndShallowCopyConstructor test = new DeepAndShallowCopyConstructor(); 
this.Stringtest = test.Stringtest; 
} 

你可能想

public DeepAndShallowCopyConstructor(DeepAndShallowCopyConstructor other){ 
    this(); 
    this.Stringtest = other.Stringtest; 
} 

(雖然很難猜測你的意圖,原來的代碼是沒有意義的我。 )

然後,Stringtest應該有小的s,否則它是違反Java命名conv並且超長的名字使得代碼難以閱讀(甚至對你而言)。