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

java深度淺度拷貝和賦值

傅智翔1年前5瀏覽0評論

Java是一門面向對象的編程語言,其內存管理機制與其他語言有所不同。在Java中,對象的賦值和拷貝是常見的操作,但是賦值和拷貝的方式卻有深度拷貝和淺度拷貝之分。

淺度拷貝即是對于引用類型的對象,賦值和拷貝只是復制了引用(即指針)而已,所以它們指向的是同一個對象,當其中一個對象的值發生變化時,另一個對象也會跟著改變。這種拷貝方式表現為兩個變量指向同一個對象,只分配了一次內存空間。

如下是一個淺度拷貝的示例代碼:

class Person {
public String name;
}
public class ShallowCopy {
public static void main(String[] args) {
Person person1 = new Person();
person1.name = "Tom";
Person person2 = person1;
System.out.println(person1.name);
System.out.println(person2.name);
person2.name = "Jerry";
System.out.println(person1.name);
System.out.println(person2.name);
}
}

這段代碼的運行結果是:

Tom
Tom
Jerry
Jerry

在代碼中,當通過“person2 = person1”將person1賦值給person2時,person2指向了person1的內存地址。因此,修改person2的name屬性值時,person1的name屬性值也會改變。

相比之下,深度拷貝會分配兩塊內存。在對一個對象進行深度拷貝時,會將引用對象的值復制到新的對象中,而不是引用對象的指針。因此,當其中一個對象的值發生變化時,另一個對象不會改變。這種拷貝方式表現為兩個變量指向各自的對象,每個對象都分配了一次內存空間。

如下是一個深度拷貝的示例代碼:

class Person implements Cloneable {
public String name;
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class DeepCopy {
public static void main(String[] args) throws CloneNotSupportedException {
Person person1 = new Person();
person1.name = "Tom";
Person person2 = (Person) person1.clone();
System.out.println(person1.name);
System.out.println(person2.name);
person2.name = "Jerry";
System.out.println(person1.name);
System.out.println(person2.name);
}
}

這段代碼的運行結果是:

Tom
Tom
Tom
Jerry

在代碼中,當通過“(Person) person1.clone()”將person1深度拷貝給person2時,person2分配了一塊新的內存空間,兩個對象互不影響。

總之,淺度拷貝和深度拷貝分別適用于不同的情況,需要根據具體的需求來進行選擇。