浅拷贝
对基本数据类型进行值传递,对引用类型进行引用传递般的拷贝。
// 类,get、set方法已省略
class Person implements Cloneable {
private int age;
private String name;
// 重写,拷贝的方法
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
测试
Person p1 = new Person(22, "张三");
Person p2 = (Person) p1.clone();
String result = p1.getName() == p2.getName() ? "clone 是浅拷贝的" : "clone 是深拷贝的";
System.out.println(result);// clone 是浅拷贝的
System.out.println(p1 == p2);// false
对象引用指向不同的地址,但是对象里的引用数据类型指向的是同一个地址
深拷贝
对基本数据类型进行值传递,对引用类型,创建一个新的对象,并复制其内容。
class User implements Cloneable{
private String name;
private Person person;
@Override
protected Object clone() throws CloneNotSupportedException {
User newUser = (User) super.clone();
newUser.person = (Person) person.clone();
return newUser;
}
}
测试
User user1 = new User("张三", new Person(22));
User user2 = (User) user1.clone();
String result2 = user1.getPerson() == user2.getPerson() ? "clone 是浅拷贝的" : "clone 是深拷贝的";
System.out.println(result2);//clone 是深拷贝的
System.out.println(user1 == user2);// false