Java深拷贝与浅拷贝

  深拷贝与浅拷贝主要的不同是对于引用变量的拷贝,浅拷贝的引用变量不仅仅是拷贝一个引用(地址).引用变量的成员也一样深拷贝。废话少说下面是两个拷贝的例子

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 }
View Code

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 }
View Code

 

posted on 2013-06-15 08:57  SandyNie  阅读(355)  评论(0编辑  收藏  举报

导航