深克隆
来源:互联网 发布:2017教育行业数据报告 编辑:程序博客网 时间:2024/05/01 19:22
浅拷贝(Object类中的clone()方法)是指在拷贝对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行拷贝。
深拷贝(或叫深克隆) 则是对对象及该对象关联的对象内容,都会进行一份拷贝。
实体类:
package com.lin.test;import java.io.Serializable;/** * @athor tianlin * * 2015年6月28日 下午1:56:18 * **/public class Dog implements Serializable{ private static final long serialVersionUID = 1L; private String dogName; public String getDogName() { return dogName; } public void setDogName(String dogName) { this.dogName = dogName; }}package com.lin.test;import java.io.Serializable;/** * @athor tianlin * * 2015年6月28日 下午1:43:24 * **/public class User implements Serializable{ private static final long serialVersionUID = 1L; private String username; private Dog dog; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } }
克隆执行类:
package com.lin.test;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;/** * @athor tianlin * * 2015年6月28日 下午1:44:08 * **/public class ObjCloner { @SuppressWarnings("unchecked") public static <T>T cloneObj(T obj){ T retVal = null; try{ // 将对象写入流中 ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(obj); // 从流中读出对象 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); retVal = (T)ois.readObject(); }catch(Exception e){ e.printStackTrace(); } return retVal; }}
测试类:
package com.lin.test;/** * @athor tianlin * * 2015年6月28日 下午1:42:47 * **/public class CloneTest { public static void main(String[] args) { User user = new User(); user.setUsername("张三"); Dog dog = new Dog(); dog.setDogName("小狗1"); user.setDog(dog); User user2 = ObjCloner.cloneObj(user); System.out.println("user username : "+user.getUsername()); System.out.println("user dogname : " + user.getDog().getDogName()); System.out.println("user2 username : "+user2.getUsername()); System.out.println("user2 dogname : " + user2.getDog().getDogName()); System.out.println(" -------------------------------------"); user2.setUsername("李四"); user2.getDog().setDogName("小狗2");; System.out.println("user username : "+user.getUsername()); System.out.println("user dogname : " + user.getDog().getDogName()); System.out.println("user2 username : "+user2.getUsername()); System.out.println("user2 dogname : " + user2.getDog().getDogName()); }}
运行结果:
user username : 张三user dogname : 小狗1user2 username : 张三user2 dogname : 小狗1 -------------------------------------user username : 张三user dogname : 小狗1user2 username : 李四user2 dogname : 小狗2
1 0
- 浅克隆、深克隆
- 深克隆,浅克隆
- 深克隆
- 深克隆
- 深克隆
- 浅克隆和深克隆
- 深克隆与浅克隆
- 深克隆与浅克隆
- Java深克隆浅克隆
- 深克隆 与 浅克隆
- 深克隆与浅克隆
- 深克隆与浅克隆
- 深克隆与浅克隆
- 深克隆和浅克隆
- 深克隆和浅克隆
- 浅克隆与深克隆
- 深克隆和浅克隆
- 深克隆和浅克隆
- centos7救援模式
- mariadb配置允许远程访问方式
- foj部分题解
- RedHat6.4 rpm 安装telnet
- From_Java_Tutorials
- 深克隆
- linux下利用nohup后台运行jar文件包程序
- 详解Service生命周期以及启动方法和停止方法
- LWP::Simple, get()
- grep:Binary file (standard input) matches
- nginx1.10安装随手笔记
- Java性能优化攻略详解
- Linux下查看wav文件的头信息-sox
- linux下查找某个文件位置的方法(find命令)