嗨,我正在尝试设计一种方法来测试一个拷贝构造函数是深拷贝还是浅拷贝。我想出了以下几点。它能正常工作吗?浅层复制的输出为
Test1
Test1浅层输出
Test1deep的输出。
在我看来,这是有意义的,因为在深拷贝中,没有任何东西被复制到第二个实例中,所以它工作正常。
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;
}
}发布于 2014-03-29 17:53:53
我认为你的问题出在这里:
public DeepAndShallowCopyConstructor(DeepAndShallowCopyConstructor other){
DeepAndShallowCopyConstructor test = new DeepAndShallowCopyConstructor();
this.Stringtest = test.Stringtest;
}你可能想要
public DeepAndShallowCopyConstructor(DeepAndShallowCopyConstructor other){
this();
this.Stringtest = other.Stringtest;
}(虽然很难猜测您的意图,但原始代码对我来说毫无意义。)
话又说回来,Stringtest应该有小的s,否则就违反了Java命名约定,而且超长的名称会使代码难以阅读(即使对您来说也是如此)。
https://stackoverflow.com/questions/22729407
复制相似问题