Java 淺復制和深復制的實例詳解
Java 淺復制和深復制的實例詳解
1 淺復制和深復制區(qū)別
淺復制:淺復制只是復制本對象的原始數(shù)據(jù)類型,如int、float、String,對于數(shù)組和對象引用等是不會復制的。因此淺復制是有風險的。
深復制:不但對原始數(shù)據(jù)類型進行復制,對于對象中的數(shù)組和對象引用也做復制的行為,從而達到對對象的完全復制。
2 代碼示例
package com;
import java.util.ArrayList;
public class Test implements Cloneable {
// 私有屬性
private ArrayList<String> nameList = new ArrayList<String>();
// 添加內(nèi)容
public void add(String s) {
this.nameList.add(s);
}
// 獲得ArrayList對象
public ArrayList<String> get() {
return this.nameList;
}
// clone方法
@Override
public Test clone() {
try {
Test test = (Test) super.clone();
test.nameList = (ArrayList<String>) this.nameList.clone(); //A
return test;
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
// 創(chuàng)建test對象
Test test = new Test();
// 設置test對象內(nèi)容
test.add("aa");
test.add("bb");
// 打印顯示test中的nameList內(nèi)容
System.out.println("test:" + test.get());
// 克隆test對象生成test2對象
Test test2 = test.clone();
// 添加"cc"內(nèi)容到test2對象中
test2.add("cc");
// 打印顯示test2中的nameList內(nèi)容
System.out.println("test2:" + test2.get());
// 打印顯示test中的nameList內(nèi)容
System.out.println("test:" + test.get());
}
}
3 淺復制運行結(jié)果
test:[aa, bb] test2:[aa, bb, cc] test:[aa, bb, cc]
4 深復制運行結(jié)果
test:[aa, bb] test2:[aa, bb, cc] test:[aa, bb]
5 結(jié)果分析
從結(jié)果分析和代碼來看,深復制對淺復制只是多了A處的代碼。
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
SpringBoot @value注解動態(tài)刷新問題小結(jié)
@Value注解 所對應的數(shù)據(jù)源來自項目的 Environment 中,我們可以將數(shù)據(jù)庫或其他文件中的數(shù)據(jù),加載到項目的 Environment 中,然后 @Value注解 就可以動態(tài)獲取到配置信息了,這篇文章主要介紹了SpringBoot @value注解動態(tài)刷新,需要的朋友可以參考下2023-09-09
ElasticSearch學習之ES Mapping實戰(zhàn)示例
這篇文章主要為大家介紹了ElasticSearch學習之ES Mapping實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
Java中如何動態(tài)創(chuàng)建接口的實現(xiàn)方法
這篇文章主要介紹了Java中如何動態(tài)創(chuàng)建接口的實現(xiàn)方法的相關資料,需要的朋友可以參考下2017-09-09
java?SpringBoot注解@Async不生效的解決方法
大家好,本篇文章主要講的是java?SpringBoot注解@Async不生效的解決方法,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01

