浅克隆与深克隆的区别-java
来源:互联网 发布:cp1200写频软件下载 编辑:程序博客网 时间:2024/06/05 23:01
浅克隆:只能克隆对象本身,对于依附于对象的对象则不予克隆对象,只对其地址克隆
浅克隆需要注意的地方:
1:被克隆的对象需要实现Cloneable
2:Cloneable没有方法,是个标志性克隆
3:如果被克隆的对象维护着另一个,则只克隆了地址
下面给出一个例子:
一个person类里面维护着一个Address类,p2克隆p1的时候只对person进行克隆,对于依附于person类的Address类并没有克隆,只是复制其地址
下面的代码是person类和Address类
import java.io.Serializable;class Address implements Serializable{ String address; public Address(String address){ this.address=address; }}public class Person implements Cloneable,Serializable{ Address a; String bianhao; String name; public Person(String bianhao,String name,Address a){ this.bianhao=bianhao; this.name=name; this.a=a; } @Override public String toString() { return "Person [a=" + a.address + ", bianhao=" + bianhao + ", name=" + name + "]"; } @Override public Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); }}
下面的代码是用浅克隆的测试
public class Demo1 { public static void main(String[] args) throws Throwable { Address a=new Address("河南"); Person p1=new Person("123", "张三", a); Person p2=(Person) p1.clone(); p2.name="李四"; p2.a.address="北京"; System.out.println("p1:"+p1); System.out.println("p2:"+p2); }}
下面是运行上面代码所产生的结果:
深克隆:深克隆是对其依附的对象也进行克隆
深克隆需要注意的地方:
1:利用IO流进行存储,然后进行读取
2:需要实现可序列化接口(java.io.Serializable)
下面是用深克隆进行克隆的例子:
person和Address跟上面的一样
下面是测试类代码:
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class Demo2 { public static void main(String[] args) throws Throwable { Address a=new Address("河南"); Person p1=new Person("110", "张三", a); writObject(p1); Person p2=readObject(); p2.a.address="北京"; p2.name="李四"; System.out.println("p1:"+p1); System.out.println("p2:"+p2); } /* * 从文件中读取这个对象 */ public static Person readObject() throws Exception{ File f=new File("person.txt"); ObjectInputStream in=new ObjectInputStream(new FileInputStream(f)); Person pp=(Person)in.readObject(); in.close(); return pp; } /* * 将对象写入磁盘 */ public static void writObject(Person p) throws Exception{ File f=new File("./person.txt"); ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(f)); out.writeObject(p); out.close(); }}
运行结果为:
注意!!!!
利用下面的代码不叫克隆,这个只是对象的引用
Person p1=new Person("110", "张三", a);Person p2=p1;
分享完毕!!!!
0 0
- java的clone() 深克隆与浅克隆的区别
- java笔试题---深克隆与浅克隆的区别
- 浅克隆与深克隆的区别-java
- java的深克隆与浅克隆
- Java的浅克隆与深克隆
- Java的深克隆与浅克隆
- java 深克隆和浅克隆区别
- 浅克隆与深克隆的区别以及实现
- Java深克隆、浅克隆和=之间的区别
- java 深克隆与浅克隆
- java 深克隆与浅克隆 .
- java 浅克隆与深克隆
- java 浅克隆与深克隆
- Java深克隆与浅克隆
- java浅克隆与深克隆
- java浅克隆与深克隆
- java 中浅克隆与深克隆
- java深克隆与浅克隆
- Java向MySQL数据库插入时间类型Date数据时需要注意的问题
- 关于Glide显示默认图片的问题(circleImageView配合问题)
- 腾讯优测优分享-Android平台的碎片化问题解决
- 关于Android Studio .so文件打包不到APK中的原因
- hdu 5794 A Simple Chess(Lucas 定理)
- 浅克隆与深克隆的区别-java
- signal函数
- XMLHttpRequest2级
- HDU 2094 产生冠军
- 冒泡排序
- 模板消息
- centos 同步外网源到本地
- 字符串训练(二)模拟实现strstr strncpm strncat strncpy函数
- OpenStack Glance 之paste