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处理的比较特殊。
浅克隆不会克隆对象内的对象,只会克隆此对象的引用,什么意思呢,看代码~
那么什么叫深克隆?
深克隆就是对对象的完克隆,包括基本类型属性和对象类型属性
3:如何实现两种克隆
如何实现浅克隆?
首先要实现Cloneable接口,并且要覆盖object的clone方法,(object的克隆方法是protected)
如何实现深克隆?
1:首先引用对象内必须实现浅克隆
2:必须在要实现深克隆的对象内,把引用对象设置为引用对象的clone方法返回的对象,代码如下