欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java淺拷貝和深拷貝的用途

洪振霞1年前7瀏覽0評論

Java中的拷貝分為兩種:淺拷貝和深拷貝。這兩種拷貝方法的使用場景不同,能夠滿足程序員不同的需求。下面我們來具體了解一下淺拷貝和深拷貝的應用范圍。

淺拷貝的使用場景

下面是一個使用淺拷貝的示例: 
class MyClass implements Cloneable{
public int[] arr = {1, 2, 3, 4};
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class ShallowCopyDemo {
public static void main(String[] args) throws CloneNotSupportedException {
MyClass obj1 = new MyClass();
MyClass obj2 = (MyClass) obj1.clone();
System.out.println(obj1 == obj2);  //false
System.out.println(obj1.arr == obj2.arr); //true
}
}

上面的示例中,我們使用淺拷貝方法clone()拷貝了一個MyClass的對象。在淺拷貝中,我們會發現兩個對象的引用指向了同一個數組。也就是說,當我們修改obj1的數組時,obj2也會隨之改變。因此,當我們需要拷貝一個對象,但是不需要改變其中引用類型數據的值時,可以使用淺拷貝。

深拷貝的使用場景

下面是一個使用深拷貝的示例: 
class MyClass implements Cloneable{
public int[] arr = {1, 2, 3, 4};
@Override
protected Object clone() throws CloneNotSupportedException {
MyClass obj = (MyClass) super.clone();
obj.arr = Arrays.copyOf(arr, arr.length);
return obj;
}
}
public class DeepCopyDemo {
public static void main(String[] args) throws CloneNotSupportedException {
MyClass obj1 = new MyClass();
MyClass obj2 = (MyClass) obj1.clone();
System.out.println(obj1 == obj2);  //false
System.out.println(obj1.arr == obj2.arr); //false
}
}

在上面的示例中,我們使用深拷貝方法clone()拷貝了一個MyClass的對象。在深拷貝中,我們可以發現,兩個對象中的數組引用指向了兩個不同的數組。也就是說,當我們修改obj1的數組時,obj2并不會隨之改變。因此,當我們需要拷貝一個對象,并且需要改變其中引用類型數據的值時,可以使用深拷貝。