Object类里面有一个protected的clone对象,返回对象的副本,进行的浅拷贝,只是副本的字段引用原对象的字段引用的对象;
如果对象里面除了基本类型的字段和不可变对象,还有其他对象,那么这些其他的对象就要进行深拷贝;
以下是一个典型的重写clone方法的例子:
class Person implements Cloneable {
int number;
String name;
String[] elements;
public Person clone() {
try {
Person person = (Person) super.clone();
person.elements = this.elements.clone();//进行了深拷贝
return person;
} catch (Exception ex) {
System.out.println("Test1的clone方法抛出异常。");
ex.printStackTrace();
}
return null;
}
}
极少需要使用clone方法,而且,有更好的替代clone方法,
1、拷贝构造器
class Person {
int number;
String name;
String[] elements;
public Person(){
}
public Person(Person person){
this.number = person.number;
this.name = person.name;
this.elements = person.elements.clone();
}
}
2、拷贝工厂方法
来源:https://www.cnblogs.com/VVL1295/p/4594118.html