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

java淺拷貝和深拷貝的用途

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

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

淺拷貝的使用場景

下面是一個(gè)使用淺拷貝的示例: 
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()拷貝了一個(gè)MyClass的對象。在淺拷貝中,我們會發(fā)現(xiàn)兩個(gè)對象的引用指向了同一個(gè)數(shù)組。也就是說,當(dāng)我們修改obj1的數(shù)組時(shí),obj2也會隨之改變。因此,當(dāng)我們需要拷貝一個(gè)對象,但是不需要改變其中引用類型數(shù)據(jù)的值時(shí),可以使用淺拷貝。

深拷貝的使用場景

下面是一個(gè)使用深拷貝的示例: 
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()拷貝了一個(gè)MyClass的對象。在深拷貝中,我們可以發(fā)現(xiàn),兩個(gè)對象中的數(shù)組引用指向了兩個(gè)不同的數(shù)組。也就是說,當(dāng)我們修改obj1的數(shù)組時(shí),obj2并不會隨之改變。因此,當(dāng)我們需要拷貝一個(gè)對象,并且需要改變其中引用類型數(shù)據(jù)的值時(shí),可以使用深拷貝。