浅拷贝:生成的两个对象的内存地址是不同的,但两个拷贝的内容相等,对于基本类型和String类,修改其值不会影响拷贝对象的内容,但是该对象里的其他引用类型的数据如果修改则拷贝的对象也会随之改变。
java中的使用的浅拷贝:
1、Arrays.copyOf(),所以ArrayList中的clone()和toArray()都是浅拷贝。
例子:
User类
private int age;
private String nanme;
private Address address;
Address类
private String city;
浅拷贝:
User类要实现Cloneable接口,且重写Object类的clone方法,才能拷贝 。
浅拷贝缺陷:当修改beijing对象时,拷贝的对象也会随之改变。(注意:不是修改User的address属性,而是修改Address的对象beijing)
深拷贝:
此时如果想要引用类型的对象在修改是也不受影响,则需要在该类型对象也要实现Cloneable接口,且重写Object类的clone方法,然后在User的clone方法中克隆出user,然后再克隆Address,再修改user的address,这样就可以达到深拷贝的效果了。
再运行上面的代码
这样就可以了。