Java小技巧--clone()的妙用

1:为什么要使用clone()

如果你在一个函数内需要把一个对象copy出来一份,并且在新copy出来的对象进行操作,不能影响源对象

这个时候你应该怎么做?

首先这样做是不对的

Person p1 =newPerson();

p1.setName("dog");

p1.setAge(10);

Person p2 = p1;

这个时候如果你把p2的name重新set一遍,那么p1.getName()将会得到p2.setName()的值。

因为你只是把p1的引用给了p2,在内存地址上,p2和p1指向的是同一个对象,如果想要p2既有p1对象的所有内容,又可以随便修改不影响p1,该怎么办呢?

1:笨方法

把p1所有的属性拿出来,new 一个p2,重新set到p2的属性内,这样因为使用了new 会重新创建一个对象。

2:使用Java clone()方法


2:clone在Java内的区别

在Java内clone分为两种,一种是浅克隆,一种是深克隆

那么什么叫浅克隆?

浅克隆指的是只克隆对象内的基本属性,比如int long double 还有String

String也是一个对象但是Java处理的比较特殊。

浅克隆不会克隆对象内的对象,只会克隆此对象的引用,什么意思呢,看代码~


Java小技巧--clone()的妙用_第1张图片


那么什么叫深克隆?

深克隆就是对对象的完克隆,包括基本类型属性和对象类型属性


3:如何实现两种克隆

如何实现浅克隆?

首先要实现Cloneable接口,并且要覆盖object的clone方法,(object的克隆方法是protected)


如何实现深克隆?

1:首先引用对象内必须实现浅克隆

2:必须在要实现深克隆的对象内,把引用对象设置为引用对象的clone方法返回的对象,代码如下


Java小技巧--clone()的妙用_第2张图片

你可能感兴趣的:(Java小技巧--clone()的妙用)