Java的clone方法

如今有User类:(Getter和Setter省略)ide

public class User implements Cloneable {

    private String name;
    private int age;
    private User user;

    @Override
    public User clone() {
        try {
            return (User) super.clone();
        } catch (CloneNotSupportedException e) {
        }
        return null;
    }
}

为了测试clone方法:测试

public class MainTest {
    public static void main(String[] args) {
        User prop = new User();
        prop.setName("prop");

        User user1 = new User();
        user1.setName("user1-name");
        user1.setAge(10);
        user1.setUser(prop);

        User user2 = user1.clone();
        user2.setName("user2-name");
        user2.setAge(20);
        user2.getUser().setName("object change");

        System.out.println(user1.getName());
        System.out.println(user1.getAge());
        System.out.println(user1.getUser().getName());

        System.out.println(user2.getName());
        System.out.println(user2.getAge());
    }
}

打印:spa

user1-name
10
object change
user2-name
20code

 

实测证实:对象

一、对象要被Clone,必须implements Cloneable接口,不然运行时会报CloneNotSupportedException异常blog

二、对象的primitive成员变量和String成员变量是深复制,对user2的修改,不影响user1原来的值接口

三、对象的通常Object属性,只是浅复制,user1和user2的user成员变量引用的是堆上的同一个对象。get

相关文章
相关标签/搜索