深拷贝和浅拷贝的概念:
官方说法:当一个对象被拷贝时,拷贝得到的对象内部的引用对象和原对象内部的引用对象地址相等,这是浅拷贝。反之,是深拷贝。
说人话:当对象中含有可变的引用类型属性时,在复制得到的新对象对该引用类型属性内容进行修改,原始对象响应的属性内容也会发生变化,这就是"浅拷贝"的现象。
浅拷贝案例:
@Getter
@Setter
@ToString
public class Person implements Cloneable {
private String name;
private Address address;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
@Getter
@Setter
@ToString
public class Address {
private String province;
private String street;
}
测试:
public static void main(String[] args) throws CloneNotSupportedException {
Person person = new Person();
person.setName("小明");
Address address = new Address();
address.setProvince("河南");
address.setStreet("中州大道");
person.setAddress(address);
Person clonePerson = (Person) person.clone();
System.out.println(person);
System.out.println(clonePerson);
clonePerson.setName("小香");
address = clonePerson.getAddress();
address.setStreet("王城大道");
System.out.println(person);
System.out.println(clonePerson);
}
运行结果:
Person(name=小明, address=Address(province=河南, street=中州大道))
Person(name=小明, address=Address(province=河南, street=中州大道))
Person(name=小明, address=Address(province=河南, street=王城大道))
Person(name=小香, address=Address(province=河南, street=王城大道))
网友评论