这是测试浅拷贝和深拷贝的合适方法吗?



嗨,我正试图设计一种测试方法,如果复制构造函数是深或浅复制。我得出如下结论。它能正常工作吗?浅拷贝的输出是

Test1
Test1

浅层输出

Test1

deep.

输出

在我的脑海中,这是有道理的,因为在深度复制中没有任何内容被复制到第二个实例。

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;
}
}

我想你的问题在这里:

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

你可能想要

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

(虽然很难猜测您的意图,但原始代码对我来说没有意义。)

然后,Stringtest应该有较小的s,否则它违反了Java命名约定,并且超长的名称使代码难以阅读(即使对您来说)。

最新更新