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

java深拷貝和淺拷貝區別

林子帆1年前8瀏覽0評論

java中的拷貝操作分為淺拷貝和深拷貝,兩種拷貝方式的實現方式和結果不太一樣。

淺拷貝

淺拷貝指的是將一個對象復制到另一個對象,新對象與原對象共享同一塊內存區域的數據。也就是說,新的對象只是原對象的一個副本,是對原對象的一個字段值的引用。因此,如果新對象發生了改變,原對象也會受到影響。

public class TestShallowCopy {
public static void main(String[] args) {
Person person1 = new Person("Tom", 20);
Person person2 = person1;
// 改變person2的年齡
person2.setAge(25);
System.out.println(person1); // Tom, 25
System.out.println(person2); // Tom, 25
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name + ", " + age;
}
}

深拷貝

深拷貝指的是將一個對象復制到另一個對象,新對象與原對象各自占有一塊內存區域,兩個對象之間沒有任何關系。因此,如果新對象發生了改變,原對象不會受到影響。

public class TestDeepCopy {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Person person1 = new Person("Tom", 20);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(person1);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
Person person2 = (Person) ois.readObject();
// 改變person2的年齡
person2.setAge(25);
System.out.println(person1); // Tom, 20
System.out.println(person2); // Tom, 25
}
}
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name + ", " + age;
}
}

一般情況下,淺拷貝的效率比深拷貝高很多。但是,在需要復制整個對象樹時,深拷貝是必須的。