java对象clone
java对象克隆
(要克隆的对象必须要实现 CloneEable 接口 这个接口是一个标志接口(空接口 没有任何的方法实现和属性) 留给jvm处理 )
@Data
@AllArgsConstructor
@NoArgsConstructor
class Person implements Cloneable{
String name;
Integer age;
Cat cat;
public Person cloneInstance() {
Person person1 = null;
try {
person1 = (Person)super.clone();
// 嵌套赋值 如果当前对象的属性中 没有cat 那么是不需要这行代码的
person1.setCat(this.cat.cloneInstance());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return person1;
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Cat implements Cloneable{
String catname;
public Cat cloneInstance() {
Cat cat = null;
try {
cat = (Cat)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return cat;
}
}
测试案例
public static void main(String[] args) {
Cat jerry = new Cat("jerry");
Person person = new Person("tom",10,jerry);
System.out.println(person);
System.out.println(System.identityHashCode(person));
Person person1 = person.cloneInstance();
System.out.println(person1);
System.out.println(System.identityHashCode(person1));
}
输出结果
Person(name=tom, age=10, cat=Cat(catname=jerry))
1554874502
Person(name=tom, age=10, cat=Cat(catname=jerry))
1846274136