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

时间:2014-03-29 09:41:53

标签: java copy-constructor deep-copy

您好我正在尝试设计一种方法来测试复制构造函数是深拷贝还是浅拷贝。我想出了以下内容。它能正常工作吗?浅拷贝的输出是

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

1 个答案:

答案 0 :(得分: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命名约定,而超长名称会使代码难以阅读(即使是你)。