嗨,我正试图设计一种测试方法,如果复制构造函数是深或浅复制。我得出如下结论。它能正常工作吗?浅拷贝的输出是
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命名约定,并且超长的名称使代码难以阅读(即使对您来说)。