Java 浅复制和深复制的实例详解
Java浅复制和深复制的实例详解
1浅复制和深复制区别
浅复制:浅复制只是复制本对象的原始数据类型,如int、float、String,对于数组和对象引用等是不会复制的。因此浅复制是有风险的。
深复制:不但对原始数据类型进行复制,对于对象中的数组和对象引用也做复制的行为,从而达到对对象的完全复制。
2代码示例
packagecom;
importjava.util.ArrayList;
publicclassTestimplementsCloneable{
//私有属性
privateArrayListnameList=newArrayList();
//添加内容
publicvoidadd(Strings){
this.nameList.add(s);
}
//获得ArrayList对象
publicArrayListget(){
returnthis.nameList;
}
//clone方法
@Override
publicTestclone(){
try{
Testtest=(Test)super.clone();
test.nameList=(ArrayList)this.nameList.clone();//A
returntest;
}catch(CloneNotSupportedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnnull;
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//创建test对象
Testtest=newTest();
//设置test对象内容
test.add("aa");
test.add("bb");
//打印显示test中的nameList内容
System.out.println("test:"+test.get());
//克隆test对象生成test2对象
Testtest2=test.clone();
//添加"cc"内容到test2对象中
test2.add("cc");
//打印显示test2中的nameList内容
System.out.println("test2:"+test2.get());
//打印显示test中的nameList内容
System.out.println("test:"+test.get());
}
}
    
 3浅复制运行结果
test:[aa,bb] test2:[aa,bb,cc] test:[aa,bb,cc]
4深复制运行结果
test:[aa,bb] test2:[aa,bb,cc] test:[aa,bb]
 5结果分析
从结果分析和代码来看,深复制对浅复制只是多了A处的代码。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
