2014-03-29 34 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并且超长的名字使得代码难以阅读(甚至对你而言)。