深拷贝与浅拷贝主要的不同是对于引用变量的拷贝,浅拷贝的引用变量不仅仅是拷贝一个引用(地址).引用变量的成员也一样深拷贝。废话少说下面是两个拷贝的例子
1.浅拷贝
1 package com.LightCopy; 2 3 public class Professor implements Cloneable{ 4 private String name; 5 private int age; 6 7 public String getName() { 8 return name; 9 } 10 11 public void setName(String name) { 12 this.name = name; 13 } 14 15 public int getAge() { 16 return age; 17 } 18 19 public void setAge(int age) { 20 this.age = age; 21 } 22 23 public Professor(String name, int age) { 24 this.name = name; 25 this.age = age; 26 } 27 28 @Override 29 public Object clone() { 30 Professor o=null; 31 try 32 { 33 o=(Professor) super.clone(); 34 } 35 catch(CloneNotSupportedException e) 36 { 37 e.printStackTrace(); 38 } 39 40 return o; 41 } 42 43 }
2.深拷贝
1 package com.DeepCopy; 2 3 import com.LightCopy.Professor; 4 5 public class Student implements Cloneable { 6 private String name; 7 private int age; 8 private Professor pro; 9 public Professor getPro() { 10 return pro; 11 } 12 13 public void setPro(Professor pro) { 14 this.pro = pro; 15 } 16 17 public Student(String name, int age,Professor pro) { 18 this.name = name; 19 this.age = age; 20 this.pro=pro; 21 } 22 23 public String getName() { 24 return name; 25 } 26 27 public void setName(String name) { 28 this.name = name; 29 } 30 31 public int getAge() { 32 return age; 33 } 34 35 public void setAge(int age) { 36 this.age = age; 37 } 38 39 @Override 40 public Object clone() { 41 Student obj = null; 42 try { 43 obj = (Student) super.clone(); 44 } catch (CloneNotSupportedException ex) { 45 ex.printStackTrace(); 46 } 47 obj.pro=(Professor)pro.clone(); 48 return obj; 49 } 50 }