深拷贝和浅拷贝
Java中拷贝问题
除了String类型,其他的引用类型在使用=号赋值的时候,会将地址传给=号左侧
1 | User a = new User(); |
要解决这样的问题就需要用到浅拷贝和深拷贝了
浅拷贝
实体类实现接口
1 | // Cloneable标记此类可以进行克隆操作,没有其他实际意义 |
浅拷贝有缺点,就是当类中有数组或者其他类成员的时候,还是会出现赋值地址的问题,所以就需要用到深拷贝
深拷贝
1 | public class User{ |
这个时候浅拷贝是解决不了这个问题的
对象有两种解决方案
new新的对象,然后赋值给user2
1
2
3
4
User2 user2 = new User2(clone.getUser().属性,属性2....);
clone.setUser2(user2);在成员类里面先进行浅拷贝,然后再将返回的对象赋值给成员类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public class User2 implements Cloneable{
public User2 clone() throws CloneNotSupportedException{
return (User2)super.clone;
}
}
public class User{
private User2 user2;
private String[] hobby;
User clone = (User) super.clone();
User2 user2 = clone.getUser2().clone();
clone.setUser2(user2);
}
数组要容易些
直接用copyOf对原数组进行覆盖即可
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 朝辞!
