版权声明:本文为博主原创文章,转载请说明出处 https://blog.csdn.net/u010002184/article/details/83107937
以下代码是深克隆:
public class User implements Cloneable {
private Integer age;
private String name;
public User() {
}
public User(Integer age) {
this.age = age;
}
public User(Integer age, String name) {
this.age = age;
this.name = name;
}
public User clone() throws CloneNotSupportedException{
return (User)super.clone();
}
@Override
public String toString() {
return "User{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
public Integer getAge() {
return age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
}
//属性也clone过来了
User u2 = new User();
u2.setAge(10);
u2.setName("Tom2");
System.out.println(u2);
User u3 = u2.clone();
System.out.println(u3);
User u4 = u2.clone();
u4.setAge(40);
u4.setName("Tom4");
System.out.println(u4);
System.out.println(u2);//原对象的属性没变
System.out.println(u3);//原对象的属性没变
输出:
User{age=10, name='Tom2'}
User{age=10, name='Tom2'}
User{age=40, name='Tom4'}
User{age=10, name='Tom2'}
User{age=10, name='Tom2'}
如果针对一个不含有子类的类,克隆就应该是深克隆吧?
我觉得深克隆不是针对不含有子类的类说的,而是针对含有子类的类来说的,如果子类复制值了并且单独开辟了存储空间则是深克隆吧,如果子类只是复制值,没有单独开辟存储空间则是浅克隆吧?
子类指的是Integer、String那些基本引用类,同时也指自定义的类。
更多可见:https://blog.csdn.net/u010002184/article/details/83147848