java对象的深浅克隆

Posted 马老师的大弟子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java对象的深浅克隆相关的知识,希望对你有一定的参考价值。

package CloneTest;

class Dog implements Cloneable{
 private String dname;
 private Integer dage;
 public Dog clone() throws CloneNotSupportedException{
  Dog cloned=(Dog) super.clone();
  return cloned;
  
 }

 public String getDname() {
  return dname;
 }

 public void setDname(String dname) {
  this.dname = dname;
 }

 public Integer getDage() {
  return dage;
 }

 public void setDage(Integer dage) {
  this.dage = dage;
 }

 @Override
 public String toString() {
  return "Dog [dname=" + dname + ", dage=" + dage + "]";
 }

 public Dog(String dname, Integer dage) {
  super();
  this.dname = dname;
  this.dage = dage;
 }

}

class Person implements Cloneable {
 private String name;
 private Integer age;
 private Dog dog;

 public Person(String name, Integer age, Dog dog) {
  this.name = name;
  this.age = age;
  this.dog = dog;
 }

 public Person clone() throws CloneNotSupportedException {
  Person cloned = (Person) super.clone();
  return cloned;

 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public Integer getAge() {
  return age;
 }

 public void setAge(Integer age) {
  this.age = age;
 }

 @Override
 public String toString() {
  return "Person [name=" + name + ", age=" + age + ", dog=" + dog + "]";
 }

 public Dog getDog() {
  return dog;
 }

 public void setDog(Dog dog) {
  this.dog = dog;
 }

}

public class CloneTest {
 public static void main(String[] args) throws CloneNotSupportedException {
  Dog dog1 = new Dog("杨狗", 5);
  Person p1 = new Person("wantao", 20, dog1);
  System.out.println("原对象" + p1.getName() + "他的狗为"
    + p1.getDog().getDname());
  System.out.println("第一次进行克隆:");
  Person p2 = p1.clone();
  System.out.println("克隆对象" + p2.getName() + "克隆狗为"
    + p2.getDog().getDname());
  System.out.println(p1 == p2 ? "克隆对象与原对象为同一个对象" : "克隆对象与原对象为不同对象");
  System.out.println(p1.getDog() == p2.getDog() ? "克隆对象的狗与原对象的狗为同一只狗"
    : "克隆对象的狗与原对象的狗为不同的狗");
  System.out.println("第二次进行克隆");
  Person p3=p1.clone();
  p3.setDog(p1.getDog().clone());
  System.out.println("克隆对象" + p3.getName() + "克隆狗为"
    + p3.getDog().getDname());
  System.out.println(p1 == p3 ? "克隆对象与原对象为同一个对象" : "克隆对象与原对象为不同对象");
  System.out.println(p1.getDog() == p3.getDog() ? "克隆对象的狗与原对象的狗为同一只狗"
    : "克隆对象的狗与原对象的狗为不同的狗");
  

 }

}

 

 

以上是关于java对象的深浅克隆的主要内容,如果未能解决你的问题,请参考以下文章

java开发——Cloneable接口clone()方法和深浅拷贝

从克隆(深浅拷贝)到原型设计模式

java中深克隆与浅克隆的区别

对象的深浅克隆

JS----对象的合并与克隆与数组的深浅克隆

java原型设计模式