JAVA的浅拷贝与深拷贝
浅拷贝:
将原对象或原数组的引用直接赋给新对象,被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象,即对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝。
代码实现:
public class Person implements Cloneable{
private String name;
private int age;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public Person() {
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
//clone是浅拷贝
// @Override
// protected Object clone() throws CloneNotSupportedException {
// return super.clone();
// }
代码引用自:https://www.cnblogs.com/noperx/p/11360067.html
深拷贝:
创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,即对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容。
代码实现:
@Override
protected Object clone() throws
CloneNotSupportedException {
String name = new String(this.name);
return new Person(23, name);
}
public static void main(String[] args) throws CloneNotSupportedException {
Person person1 = new Person(23, "李四");
// Person person2 = (Person) person1.clone();//浅拷贝
Person person2 = (Person) person1.clone();//深拷贝
String result = person1.getName() == person2.getName() ? "clone是浅拷贝" : "clone是深拷贝";
System.out.println(result);
}
}
代码引用自:https://www.cnblogs.com/noperx/p/11360067.html