java中的深拷贝
2024-09-07 06:31:52
对象拷贝有时让我们忽视其重要性,又或者因为想当然而导致若干程序问题。
浅拷贝
浅拷贝即普通拷贝,即对要拷贝的对象进行复制。例如对于Entity类:
class Entity{
int a;
String b;
List<String> c;
List<Object> d;
}
对于Entity类的对象entity,把entity的对象直接赋给另一个变量也算是一种浅拷贝,这样就有两个变量指向堆中同一个对象。更近一层的浅拷贝是还要对
entity对象中的各个属性进行复制,即重新new一个Entity类对象,再将a、b、c、d属性复制赋给新创建的对象:
Entity entity2 = new Entity();
entity2.a = entity.a;
entity2 b = entity.b;
entity2.c = entity.c;
entity2.d = entity.d;
这样得到的拷贝对象是一种浅拷贝,因为这样直接赋值的结果是对于对象属性,两个对象entity和entity2中对应的属性还是指向同一块内存区域,二者并非
真正独立。如此若要对其中的属性进行改变,则会同时影响这两个对象。
即使对对象属性进行重新new出新空间,重新按元素赋值,也不能保证属性对象中的属性也是对象,这样层层推进,操作起来很是不便。
深拷贝
要实现深拷贝,除了逐层赋值之外,还有一种比较简单直观的方式即序列化。序列化将内存对象以文件的形式保存在磁盘,若要重新恢复到内存,需要重新
开辟内存,这样两个对象就会实现完全独立,互不影响,但是需要对不能序列化的字段进行单独处理。
最新文章
- ARM学习 之 如何在向内核写入系统调用
- React-Native android在windows下的踩坑记
- eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错? java.lang.ClassNotFoundException: com.branchitech.app.startup.AppStartupContextListener java.lang.ClassN
- netstat命令的常见用法(转)
- MVC - 18.缓存
- workerman 的回调函数
- jQuery的简单入门练习
- 可进行JavaScript代码测试与调试的12个网站
- update语句
- 自动布局AutoLayout
- 在JS中调用JAVA变量
- Ansible 运维自动化 ( 配置管理工具 )
- golang自定义路由控制实现(一)
- 视觉显著性简介 Saliency Detection
- kinect 深度图与彩色图对齐程序
- Linux网络编程学习(一) ----- 概论和Linux模型(第一章第二章)
- Caltech数据使用详情
- alibaba fastjson TypeReference 通过字符串反射返回对象
- VIM选择文本块/复制/粘贴
- 获得硬盘的ID序列号(XE10.1+WIN8.1)