java 深克隆实例(一)

版权声明:本文为博主原创文章,转载请说明出处 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

猜你喜欢

转载自blog.csdn.net/u010002184/article/details/83107937
今日推荐