加载中...
加载中...
Java通过重写clone()方法进行浅拷贝

Java通过重写clone()方法进行浅拷贝 原创

Java通过重写clone()方法是进行浅拷贝。

User u1=new User('Java',16);

User u2=u1.clone();

u2.setName('JavaScript');


浅拷贝(Shallow Copy):

1.对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。

2.对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成员变量都指向同一个实例。

深拷贝

深拷贝不仅要复制对象的所有基本数据类型的成员变量值,还要为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象。应用对象不再是只想同一个对象了。


特殊类型

String类型非常特殊,String类型属于引用数据类型,不属于基本数据类型,但是String类型的数据是存放在常量池中的,是无法修改的。也就是说,当我将name属性从“Java”改为“JavaScript"后,并不是修改了这个数据的值,而是把这个数据的引用从指向”JavaScript“这个常量。

在这种情况下,另一个对象的name属性值仍然指向”Java“不会受到影响。


可利用serializable实现深拷贝。

没有更多推荐了 [去首页]
image
文章
357
原创
284
转载
73
翻译
0
访问量
199056
喜欢
47
粉丝
6
码龄
5年
资源
0

文章目录

加载中...
0
2