Java 淺復(fù)制和深復(fù)制的實(shí)例詳解
Java 淺復(fù)制和深復(fù)制的實(shí)例詳解
1 淺復(fù)制和深復(fù)制區(qū)別
淺復(fù)制:淺復(fù)制只是復(fù)制本對(duì)象的原始數(shù)據(jù)類型,如int、float、String,對(duì)于數(shù)組和對(duì)象引用等是不會(huì)復(fù)制的。因此淺復(fù)制是有風(fēng)險(xiǎn)的。
深復(fù)制:不但對(duì)原始數(shù)據(jù)類型進(jìn)行復(fù)制,對(duì)于對(duì)象中的數(shù)組和對(duì)象引用也做復(fù)制的行為,從而達(dá)到對(duì)對(duì)象的完全復(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對(duì)象
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對(duì)象
Test test = new Test();
// 設(shè)置test對(duì)象內(nèi)容
test.add("aa");
test.add("bb");
// 打印顯示test中的nameList內(nèi)容
System.out.println("test:" + test.get());
// 克隆test對(duì)象生成test2對(duì)象
Test test2 = test.clone();
// 添加"cc"內(nèi)容到test2對(duì)象中
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ù)制運(yùn)行結(jié)果
test:[aa, bb] test2:[aa, bb, cc] test:[aa, bb, cc]
4 深復(fù)制運(yùn)行結(jié)果
test:[aa, bb] test2:[aa, bb, cc] test:[aa, bb]
5 結(jié)果分析
從結(jié)果分析和代碼來看,深復(fù)制對(duì)淺復(fù)制只是多了A處的代碼。
如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
SpringMVC中@RequestMapping注解用法實(shí)例
通過@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
js中去除字符串中所有的html標(biāo)簽代碼實(shí)例
這篇文章主要介紹了js中去除字符串中所有的html標(biāo)簽代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Idea配置maven-tomcat-plugin插件實(shí)現(xiàn)項(xiàng)目部署
今天小編就為大家分享一篇關(guān)于Idea配置maven-tomcat-plugin插件實(shí)現(xiàn)項(xiàng)目部署,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
Java父線程(或是主線程)等待所有子線程退出的實(shí)例
下面小編就為大家分享一篇Java父線程(或是主線程)等待所有子線程退出的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2017-11-11
Java批量從svn導(dǎo)出多個(gè)項(xiàng)目代碼實(shí)例
這篇文章主要介紹了java批量從svn導(dǎo)出多個(gè)項(xiàng)目代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
spring中@Autowired自動(dòng)注入依賴項(xiàng)的使用
當(dāng)使用@Autowired注解時(shí),它可以自動(dòng)注入依賴項(xiàng),例如其他類的實(shí)例,本文就來詳細(xì)的介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
基于springboot微信公眾號(hào)開發(fā)(微信自動(dòng)回復(fù))
這篇文章主要介紹了基于springboot微信公眾號(hào)開發(fā)(微信自動(dòng)回復(fù)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
對(duì)比Java設(shè)計(jì)模式編程中的狀態(tài)模式和策略模式
這篇文章主要介紹了Java設(shè)計(jì)模式編程中的狀態(tài)模式和策略模式對(duì)比,文中列舉了兩種模式的相似點(diǎn)和不同點(diǎn),并都舉了代碼的實(shí)例作為參照,需要的朋友可以參考下2016-04-04

