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

java淺拷貝和深拷貝面試題

錢斌斌1年前6瀏覽0評論

在Java中,深拷貝和淺拷貝是我們常見的概念,他們用于創建對象的副本,為了在面試中編寫更好的代碼,我們需要理解這兩種不同的拷貝方式的工作原理。

淺拷貝

在淺拷貝中,對象的字段被復制到新對象中,但是對于引用類型以及嵌套對象,僅復制了引用,而不是實際內容。淺拷貝提供了與原始對象相同的屬性引用,但是副本仍然共享與原始對象相同的對此嵌套屬性的引用。這意味著在副本中更改嵌套對象屬性也會影響原始對象。

深拷貝

深拷貝與淺拷貝相反,它將完全創建一個新的復制對象。在深拷貝中,復制的對象不會與原始對象共享任何相同的引用。而是創建與原始對象相同的新引用。嵌套對象也會進行深拷貝,以創建一個完全不同的對象,這意味著原始對象和已拷貝對象之間完全獨立。

如何實現淺拷貝和深拷貝?

在Java中,實現淺拷貝和深拷貝可以使用下列方式:
1、淺拷貝:通過實現Cloneable接口進行淺拷貝。例如:
public class Person implements Cloneable {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
2、深拷貝:通過序列化和反序列化進行深拷貝。例如:
public class Person implements Serializable {
private int id;
private String name;
private Address address;
public Person(int id, String name, Address address) {
this.id = id;
this.name = name;
this.address = address;
}
public Person deepClone() throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return (Person) ois.readObject();
}
}
public class Address implements Serializable {
private String city;
public Address(String city) {
this.city = city;
}
}

總之,在編寫面試代碼時,我們需要理解淺拷貝和深拷貝的區別,以及如何實現它們來創建對象的副本。