Java 淺復(fù)制和深復(fù)制的實例詳解
Java 淺復(fù)制和深復(fù)制的實例詳解
1 淺復(fù)制和深復(fù)制區(qū)別
淺復(fù)制:淺復(fù)制只是復(fù)制本對象的原始數(shù)據(jù)類型,如int、float、String,對于數(shù)組和對象引用等是不會復(fù)制的。因此淺復(fù)制是有風(fēng)險的。
深復(fù)制:不但對原始數(shù)據(jù)類型進(jìn)行復(fù)制,對于對象中的數(shù)組和對象引用也做復(fù)制的行為,從而達(dá)到對對象的完全復(fù)制。
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();
// 設(shè)置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 淺復(fù)制運行結(jié)果
test:[aa, bb] test2:[aa, bb, cc] test:[aa, bb, cc]
4 深復(fù)制運行結(jié)果
test:[aa, bb] test2:[aa, bb, cc] test:[aa, bb]
5 結(jié)果分析
從結(jié)果分析和代碼來看,深復(fù)制對淺復(fù)制只是多了A處的代碼。
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
SpringMVC中@RequestMapping注解用法實例
通過@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
Idea配置maven-tomcat-plugin插件實現(xiàn)項目部署
今天小編就為大家分享一篇關(guān)于Idea配置maven-tomcat-plugin插件實現(xiàn)項目部署,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
基于springboot微信公眾號開發(fā)(微信自動回復(fù))
這篇文章主要介紹了基于springboot微信公眾號開發(fā)(微信自動回復(fù)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
對比Java設(shè)計模式編程中的狀態(tài)模式和策略模式
這篇文章主要介紹了Java設(shè)計模式編程中的狀態(tài)模式和策略模式對比,文中列舉了兩種模式的相似點和不同點,并都舉了代碼的實例作為參照,需要的朋友可以參考下2016-04-04

