JAVA深复制浅复制
来源:互联网 发布:do as infinity 知乎 编辑:程序博客网 时间:2024/05/20 19:30
当类中只有基本数据类型的时候,可以进行浅复制,需要复制的类首先要继承Clonebale接口(只是一个标识接口),然后重写clone()方法
public class Clone implements Cloneable{ private int a = 0; public int getInt(){ return a; } public int changeInt(){ a = 1; return a; } public Object clone(){//覆盖clone方法 Object o = null; try { o = super.clone();//无论clone类的继承结构是什么,super.clone()都会直接或间接调用java.lang.Object类的clone方法 } catch (CloneNotSupportedException e) { e.printStackTrace(); } return o; }}public class Main { public static void main(String[] args) throws IOException { Clone c = new Clone(); Clone cl = (Clone)c.clone(); cl.changeInt(); System.out.println("c的int值为"+c.getInt()); System.out.println("cl的int值为"+cl.getInt()); }}
当类中包含一些对象的时候,就要用到深复制了,实现方法时在对对象调用clone方法完成复制后,接着对对象中的非基本类型的属性也调用clone方法完成深复制。
public class Clone implements Cloneable{ private Date date = new Date(); public Date getDate(){ return date; } public void setDate(Date date){ this.date = date; } public void changeDate(){ this.date.setMonth(8); } public Object clone(){//覆盖clone方法 Clone o = null; try { o = (Clone) super.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //实现深复制 o.date = (Date) this.getDate().clone(); return o; }}public class Main { public static void main(String[] args) throws IOException { Clone c = new Clone(); Clone cl = (Clone)c.clone(); cl.changeDate(); System.out.println("c的date为"+c.getDate()); System.out.println("cl的date为"+cl.getDate()); }}
实现深复制要注意确保类中包含的所有非基本数据类型的成员变量都实现了深复制。
深复制与浅复制的相同之处在于被复制对象的所有变量与原来对象的值都相同
不同之处在于引用的其他对象的变量。浅复制不复制引用的对象,而深复制会使引用其他对象的变量指向被复制的新对象。例如
Class Test{ public String s = "aaaa";}
浅复制后原Test对象和Test对象副本指向的字符串对象“aaaa”是同一个;而深复制会复制出一个相同的“aaaa”,这样原Test对象和Test对象的副本就会指向不同“aaaa”
浅复制如下:
深复制如下:
阅读全文
0 0
- Java 深复制,浅复制
- JAVA深复制浅复制
- java对象的复制,浅复制、深复制
- JAVA学习总结之简单复制、浅复制、深复制
- Java对象克隆(复制):深复制和浅复制
- JAVA中浅复制与深复制
- JAVA中浅复制与深复制
- JAVA中浅复制与深复制
- JAVA中浅复制与深复制
- java中的浅复制与深复制
- JAVA中浅复制与深复制
- JAVA中浅复制与深复制
- JAVA中浅复制与深复制
- JAVA中浅复制与深复制
- JAVA中浅复制与深复制
- JAVA中浅复制与深复制
- JAVA中浅复制与深复制
- JAVA中浅复制与深复制
- 学习MongoDB 一:MongoDB 入门(安装与配置)
- 彻底弄懂CommonJS和AMD/CMD!
- 1113. Integer Set Partition (25)
- swift_044(Swift 计算属性和存储属性的概念以及使用)
- Android Studio返回上一光标处失效
- JAVA深复制浅复制
- 安装Windows digits问题列表
- C++学习(八)入门篇——复合类型
- 记录,关于鼠标的函数
- 在Ubuntu下搭建C/C++编程环境(vim+gcc+gdb)
- Table is marked as crashed and should be repaired
- phylip的具体使用方法
- 如何安全的存储密码
- IPv6、Unix 域套接字和网络接口