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

java淺拷貝和深拷貝的實現

吳曉飛1年前8瀏覽0評論

在Java編程中,對象的拷貝可以分為淺拷貝和深拷貝。淺拷貝簡單來說就是復制對象的引用,兩個對象引用了同一塊內存,而深拷貝則是復制對象的內容,兩個對象引用了不同的內存。

接下來分別介紹淺拷貝和深拷貝的實現:

//淺拷貝的實現
class ShallowCopy implements Cloneable {
private int[] nums;
public ShallowCopy(int[] nums) {
this.nums=nums;
}
public int[] getNums() {
return nums;
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
}
//使用示例
int[] nums = {1, 2, 3};
ShallowCopy shallow = new ShallowCopy(nums);
ShallowCopy shallowCopy = (ShallowCopy) shallow.clone();
System.out.println(shallow.getNums() == shallowCopy.getNums()); //true,兩個對象引用的是同一塊內存
//深拷貝的實現
class DeepCopy implements Cloneable {
private int[] nums;
public DeepCopy(int[] nums) {
this.nums=nums;
}
public int[] getNums() {
return nums;
}
public Object clone()throws CloneNotSupportedException{
DeepCopy deepCopy=(DeepCopy)super.clone();
deepCopy.nums= (int[]) nums.clone();//這里需要深拷貝nums數組
return deepCopy;
}
}
//使用示例
int[] nums = {1, 2, 3};
DeepCopy deep = new DeepCopy(nums);
DeepCopy deepCopy = (DeepCopy) deep.clone();
System.out.println(deep.getNums() == deepCopy.getNums()); //false,兩個對象引用的是不同的內存

可以看出,深拷貝需要注意變量類型,特別是內部包含引用類型的變量需要進行再次拷貝,以保證拷貝出來的對象是獨立的。