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

java深拷貝和淺拷貝面試

錢瀠龍1年前8瀏覽0評論

在Java中,對象的復制可以使用淺拷貝和深拷貝兩種方法。雖然這兩種方式的目的都是為了復制對象,但是它們的實現方式和實現效果卻有許多不同。

淺拷貝是指在復制對象時,只復制對象的引用而不是對象本身。簡單來說,就是將原對象中的成員變量的地址直接復制給新對象。因此,新對象與原對象共享相同的成員變量。這種方式的好處是可以節省內存空間,但是如果其中任何一個對象對共享成員變量進行了修改,另一個對象也會受到影響。

// 淺拷貝實現代碼示例
class Person implements Cloneable {
String name;
Address address;
public Person clone() throws CloneNotSupportedException {
return (Person) super.clone();
}
}
class Address {
String city;
}
Person person1 = new Person();
person1.name = "Tom";
person1.address = new Address();
Person person2 = person1.clone(); // 淺拷貝
person2.name = "Jerry";
System.out.println(person1.name); // Tom
System.out.println(person2.name); // Jerry
person2.address.city = "New York"; // 修改共享成員變量
System.out.println(person1.address.city); // New York

深拷貝是指在復制對象時,將原對象中的所有成員變量都復制一份到新對象中,新對象與原對象互不干擾,各自擁有獨立的成員變量。因此,深拷貝需要更多的內存空間。但是如果需要修改其中一個對象的成員變量,不會影響到另一個對象的成員變量。

// 深拷貝實現代碼示例
class Person implements Cloneable {
String name;
Address address;
public Person clone() throws CloneNotSupportedException {
Person person = (Person) super.clone();
person.address = (Address) address.clone();
return person;
}
}
class Address implements Cloneable {
String city;
public Address clone() throws CloneNotSupportedException {
return (Address) super.clone();
}
}
Person person1 = new Person();
person1.name = "Tom";
person1.address = new Address();
Person person2 = person1.clone(); // 深拷貝
person2.name = "Jerry";
System.out.println(person1.name); // Tom
System.out.println(person2.name); // Jerry
person2.address.city = "New York"; // 修改不共享成員變量
System.out.println(person1.address.city); // null
System.out.println(person2.address.city); // New York

在面試中,通常會詢問候選人對淺拷貝和深拷貝的理解以及區別,以此考察候選人的Java基礎知識。如果候選人能夠清晰地解釋這兩種拷貝方式的原理和實現,并且能夠手寫出相應的代碼,那么就能夠給面試官留下良好的印象。