Java中对象的深复制和浅复制详解.doc

Java中对象的深复制和浅复制详解.doc

ID:57601432

大小:86.79 KB

页数:7页

时间:2020-08-28

Java中对象的深复制和浅复制详解.doc_第1页
Java中对象的深复制和浅复制详解.doc_第2页
Java中对象的深复制和浅复制详解.doc_第3页
Java中对象的深复制和浅复制详解.doc_第4页
Java中对象的深复制和浅复制详解.doc_第5页
资源描述:

《Java中对象的深复制和浅复制详解.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java中对象的深复制和浅复制详解1.浅复制与深复制概念⑴浅复制(浅克隆)被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。⑵深复制(深克隆)被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。2.Java的clone()方法⑴clone方法将对象复制了一份并

2、返回给调用者。一般而言,clone()方法满足:①对任何的对象x,都有x.clone()!=x//克隆对象与原对象不是同一个对象②对任何的对象x,都有x.clone().getClass()==x.getClass()//克隆对象与原对象的类型一样③如果对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成立。⑵Java中对象的克隆①为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。②在派生类中覆盖基类的clone()方法,并声明为public。③在派生类的c

3、lone()方法中,调用super.clone()。④在派生类中实现Cloneable接口。请看如下代码:1.public class Student implements Cloneable 2.{ 3.  String name; 4.int age; 5.  Student(String name,int age) 6.  { 7.  this.name=name; 8.  this.age=age; 9.  } 10.public Object clone() 11.  { 12.   Object o=

4、null; 13.  try 14.   { 15.   o=(Student)super.clone();//Object 中的clone()识别出你要复制的是哪一个对象。 16.   } 17.  catch(CloneNotSupportedException e) 18.   { 19.    System.out.println(e.toString()); 20.   } 21.  return o; 22.  }  23. 24.public static void main(String[] ar

5、gs) 25.  { 26.  Student s1=new Student("zhangsan",18); 27.  Student s2=(Student)s1.clone(); 28.  s2.name="lisi"; 29.  s2.age=20; 30.  //修改学生2后,不影响学生1的值。 31.  System.out.println("name="+s1.name+","+"age="+s1.age); 32.  System.out.println("name="+s2.name+","+"a

6、ge="+s2.age); 33.} 1.} 说明:①为什么我们在派生类中覆盖Object的clone()方法时,一定要调用super.clone()呢?在运行时刻,Object中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中。②继承自java.lang.Object类的clone()方法是浅复制。以下代码可以证明之。1.class Professor 2.{ 3.  String name; 4.  int age; 5.  P

7、rofessor(String name,int age) 6.  { 7.  this.name=name; 8.  this.age=age; 9.  } 10.} 11.public class Student implements Cloneable 12.{ 13.  String name;// 常量对象。 14.  int age; 15.  Professor p;// 学生1和学生2的引用值都是一样的。 16.  Student(String name,int age,Professor p) 

8、17.  { 18.  this.name=name; 19.  this.age=age; 20.  this.p=p; 21.  } 22.public Object clone() 23.  { 24.   Student o=null; 25.  try 26.   { 27.    o=(Student)super.clone(); 28.   } 29.  c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。