解析JAVA深度克隆與淺度克隆的區(qū)別詳解
深度克隆類:
Java代碼
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class DepthClone {
public final static Object objectCopy(Object oldObj) {
Object newObj = null;
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(oldObj);//源對(duì)象
ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi= new ObjectInputStream(bi);
newObj = oi.readObject();//目標(biāo)對(duì)象
} catch (IOException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
return newObj;
}
}
淺度克隆類:
Java代碼
import java.io.Serializable;
public class SimpleClone implements Cloneable ,Serializable {
private static final long serialVersionUID = -7552721152118950502L;
public String s = null;
public Object o = null;
public CloneObject cloneObject = null;
public SimpleClone(CloneObject cloneObject) {
this.cloneObject = cloneObject;
}
public Object clone() {
SimpleClone newSimpleClone = null;
try {
/* 淺克隆 */
newSimpleClone = (SimpleClone)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return newSimpleClone;
}
}
克隆對(duì)象:
Java代碼
import java.io.Serializable;
public class CloneObject implements Serializable{
private static final long serialVersionUID = 4332788486669750696L;
private String name ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
克隆測試:
Java代碼
public class TestClone {
public static void main(String[] arg) {
CloneObject obj1 = new CloneObject();
obj1.setName("cloneOne");
CloneObject obj2 = new CloneObject();
obj2.setName("cloneTwo");
SimpleClone simpleClone1 = new SimpleClone(obj1);
SimpleClone simpleClone2 = new SimpleClone(obj2);
simpleClone1.s = "simpleClone1";
simpleClone1.o = "simpleClone1Object";
//simpleClone2 = (SimpleClone)simpleClone1.clone();
simpleClone2 = (SimpleClone)DepthClone.objectCopy(simpleClone1);
/* 如果是淺克隆, simpleClone1中的cloneObject會(huì)隨著simpleClone2的cloneObject改變面改變*/
simpleClone2.cloneObject.setName("cloneThree");
System.out.println(simpleClone1.cloneObject.getName());
System.out.println(simpleClone2.cloneObject.getName());
}
}
相關(guān)文章
SpringBoot?Schedule調(diào)度任務(wù)的動(dòng)態(tài)管理
Scheduled定時(shí)任務(wù)是Spring?boot自身提供的功能,所以不需要引入Maven依賴包,下面這篇文章主要給大家介紹了關(guān)于SpringBoot通過@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)以及問題解決的相關(guān)資料,需要的朋友可以參考下2023-02-02
spring boot項(xiàng)目生成docker鏡像并完成容器部署的方法步驟
這篇文章主要介紹了spring boot項(xiàng)目生成docker鏡像并完成容器部署的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
java基于mongodb實(shí)現(xiàn)分布式鎖的示例代碼
本文主要介紹了java基于mongodb實(shí)現(xiàn)分布式鎖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
java application maven項(xiàng)目打自定義zip包實(shí)例(推薦)
下面小編就為大家?guī)硪黄猨ava application maven項(xiàng)目打自定義zip包實(shí)例(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
Java中Scanner類與BufferReader類的不同點(diǎn)(非常詳細(xì))
這篇文章主要介紹了Java中Scanner類與BufferReader類的不同點(diǎn)(非常詳細(xì))的相關(guān)資料,需要的朋友可以參考下2016-08-08
springboot登陸過濾功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了springboot登陸過濾功能的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
Java8新特性之深入解析日期和時(shí)間_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java8新特性之深入解析日期和時(shí)間_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-06-06
SpringBoot解決數(shù)據(jù)庫時(shí)間和返回時(shí)間格式不一致的問題
這篇文章主要介紹了SpringBoot解決數(shù)據(jù)庫時(shí)間和返回時(shí)間格式不一致的問題,文章通過代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)和工作有一定的幫助,需要的朋友可以參考下2024-03-03

