Java中如何实现对象拷贝
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这篇文章给大家介绍Java中如何实现对象拷贝,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。引用的拷贝1 //引用拷贝2 private static void copyR
千家信息网最后更新 2025年01月25日Java中如何实现对象拷贝
这篇文章给大家介绍Java中如何实现对象拷贝,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
引用的拷贝
1 //引用拷贝2 private static void copyReferenceObject(){3 Person p = new Person(23, "zhang");4 Person p1 = p;5 System.out.println(p);6 System.out.println(p1);7 }
这里打印的结果:
Person@3654919e
Person@3654919e
可以看到,打印的结果是一样的,也就是说,二者的引用是同一个对象,并没有创建出一个新的对象。因此要区分引用拷贝和对象拷贝的区别,下面要介绍的就是对象拷贝。
浅拷贝
如果pojo中存在的是基本数据类型 ,String 除外 ,实现Cloneable 覆写Clone 方法 这个就是浅拷贝
- code
1 package core.java.deeporshoawcopy; 2 3 /** 4 * @author DGW-PC 5 * @date 2018年6月7日 6 * @see 验证 浅拷贝 一般要求实体类使用包装类型 对于深拷贝 类中存在对其他类的引用,也需要实现cloneable接口 7 */ 8 9 class Person implements Cloneable{10 private String name;11 private Integer age;12 public String getName() {13 return name;14 }15 public void setName(String name) {16 this.name = name;17 }18 public Integer getAge() {19 return age;20 }21 public void setAge(Integer age) {22 this.age = age;23 }24 @Override25 protected Object clone() throws CloneNotSupportedException {26 /*Person p=null;27 try{28 p=(Person) super.clone();29 }catch (CloneNotSupportedException e) {30 }*/31 return super.clone();32 }33 }34 35 public class Base {36 37 public static void main(String[] args) throws CloneNotSupportedException {38 Person person = new Person();39 person.setName("a");40 person.setAge(12);41 Person per1=(Person) person.clone();42 per1.setName("b");43 per1.setAge(14);;44 System.out.println(person.getName()+"> 深拷贝- 如果你的POJO 存在的不是基本上数据类型,可以是自己定义类型,也可以其他包提供的类型 这里以java 提供的Data 的为例子 可以看下面的代码 自身实现clone 方法 你在涉及到使用拷贝的时候一定要注意别的包提供的类是否出现了问题1 /** 2 * Return a copy of this object. 3 */ 4 public Object clone() { 5 Date d = null; 6 try { 7 d = (Date)super.clone(); 8 if (cdate != null) { 9 d.cdate = (BaseCalendar.Date) cdate.clone();10 }11 } catch (CloneNotSupportedException e) {} // Won't happen12 return d;13 } - 下面介绍一下基本深拷贝的代码 很短 : 你一定主要 主类包装了多少其他的引用类型的其他类,那么其他必须都要实现Cloneable 接口 以及clone 方法1 package core.java.deeporshoawcopy; 2 3 4 /** 5 * @author DGW-PC 6 * @date 2018年6月7日 7 * @see 实现序列化 深拷贝 8 */ 9 10 class Dog implements Cloneable{11 private String name;12 13 public String getName() {14 return name;15 }16 17 public void setName(String name) {18 this.name = name;19 }20 @Override21 protected Object clone() throws CloneNotSupportedException {22 return super.clone();23 }24 }25 class User implements Cloneable{26 private String name;27 private Dog dog;28 public String getName() {29 return name;30 }31 public void setName(String name) {32 this.name = name;33 }34 public Dog getDog() {35 return dog;36 }37 public void setDog(Dog dog) {38 this.dog = dog;39 }40 @Override41 protected Object clone() throws CloneNotSupportedException {42 User u=(User) super.clone();43 u.dog=(Dog) dog.clone(); //多个需要在全部把关系搞清楚44 return u;45 }46 }47 48 public class ObjCloner {49 public static void main(String[] args) throws CloneNotSupportedException {50 Dog dog = new Dog();51 dog.setName("田园犬");52 User user = new User();53 user.setDog(dog);54 user.setName("王二");55 User user1=(User) user.clone();56 user1.setName("张三");57 Dog dog2 = new Dog();58 dog2.setName("德国牧羊犬");59 user1.setDog(dog2);60 System.out.println(user.getName()+"养了"+ user.getDog().getName());61 System.out.println(user1.getName()+"养了"+ user1.getDog().getName());62 }63 } 结果: 串行化方式实现深拷贝 - 以下代码着重注意一下 CloneObj方法 ,就行。 1 package core.java.deeporshoawcopy; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.ObjectInputStream; 6 import java.io.ObjectOutputStream; 7 import java.io.Serializable; 8 9 /** 10 * @author DGW-PC 11 * @date 2018年6月7日 12 * @since 串行化 实现 深拷贝 13 */ 14 15 class Body implements Serializable{ 16 /** 17 * 18 */ 19 private static final long serialVersionUID = 1L; 20 private String name; 21 private Fonter fonter; 22 private Head head; 23 public String getName() { 24 return name; 25 } 26 public void setName(String name) { 27 this.name = name; 28 } 29 public Fonter getFonter() { 30 return fonter; 31 } 32 public void setFonter(Fonter fonter) { 33 this.fonter = fonter; 34 } 35 public Head getHead() { 36 return head; 37 } 38 public void setHead(Head head) { 39 this.head = head; 40 } 41 @Override 42 public String toString() { 43 return "Body [name=">转自 https://www.cnblogs.com/dgwblog/p/9152358.html
关于Java中如何实现对象拷贝就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
拷贝
对象
类型
方法
代码
结果
内容
就是
接口
数据
更多
包装
帮助
不错
也就是
也就是说
例子
兴趣
多个
实体
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
潍坊软件开发怎么样
云南服务器电源厂家直销
福田区软件开发培训
我国互联网网络安全太势
梦幻西游全服最强服务器排行
嘉定区制造网络技术供应
数据库软件开发工具免费正式版
数据库技术教学
计算机网络技术专升本是什么
护苗网络安全课 活动总结
湖南win10服务器租用
达梦数据库启动顺序
危机解密数据库
三星6g网络技术
安徽字节互联网科技有限公司
国内授时服务器
江苏语音网络技术服务保障
海播服务器有什么作用
数据库前端后台关系
高层人才网络安全
查看数据库是否为单用户
贵州省服务器价格
武汉弘毅互联网络技术
服务器套餐和家用宽带套餐
大学网络安全教育总结报告
公民网络安全 绑定
怎么关闭云服务器自动升级
安装ug过程中时服务器启动失败
齐齐哈尔雅润软件开发有限公司
最新网络安全概念龙头