色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java深克隆和淺克隆區(qū)別

克隆是在Java編程中非常常用的一個(gè)操作,可以實(shí)現(xiàn)對(duì)象的復(fù)制。但是在Java中克隆分為深克隆和淺克隆,它們有什么不同點(diǎn)呢?下面我們一起來(lái)看一看。

首先,我們需要知道什么是淺克隆和深克隆。

淺克隆是指只克隆了被克隆對(duì)象的基本類型和引用類型變量的引用地址。

public class ShallowClone implements Cloneable{
private int num;
private String name;
private StringBuilder sb;
public ShallowClone(int num, String name, StringBuilder sb) {
this.num = num;
this.name = name;
this.sb = sb;
}
public Object clone() {
try {
return super.clone();
} catch(CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}

上面的代碼是一個(gè)淺克隆例子,可以看到我們只是使用了clone()方法進(jìn)行克隆,并沒(méi)有對(duì)其中的引用類型變量做處理。

深克隆是指除了克隆基本類型和引用類型變量的引用地址之外,也會(huì)克隆其中的所有引用類型變量。

public class DeepClone implements Cloneable{
private int num;
private String name;
private StringBuilder sb;
public DeepClone(int num, String name, StringBuilder sb) {
this.num = num;
this.name = name;
this.sb = sb;
}
public Object clone() {
try {
DeepClone clone = (DeepClone)super.clone();
clone.sb = new StringBuilder(this.sb.toString());
return clone;
} catch(CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}

上面的代碼是一個(gè)深克隆例子,可以看到我們?cè)诳寺∫妙愋妥兞繒r(shí),使用了新建一個(gè)對(duì)象的方法進(jìn)行復(fù)制。

深克隆的克隆過(guò)程比淺克隆更加耗時(shí)、耗空間,也更加嚴(yán)謹(jǐn)。而在有些情況下,如只是需要對(duì)基本類型進(jìn)行克隆時(shí),淺克隆就可以完全勝任了。

關(guān)于克隆的使用,需要格外小心,在確定需要使用克隆時(shí),務(wù)必清楚對(duì)象內(nèi)部的引用關(guān)系。