对象拷贝有时让我们忽视其重要性,又或者因为想当然而导致若干程序问题。

浅拷贝

浅拷贝即普通拷贝,即对要拷贝的对象进行复制。例如对于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出新空间,重新按元素赋值,也不能保证属性对象中的属性也是对象,这样层层推进,操作起来很是不便。

深拷贝

要实现深拷贝,除了逐层赋值之外,还有一种比较简单直观的方式即序列化。序列化将内存对象以文件的形式保存在磁盘,若要重新恢复到内存,需要重新

开辟内存,这样两个对象就会实现完全独立,互不影响,但是需要对不能序列化的字段进行单独处理。

最新文章

  1. ARM学习 之 如何在向内核写入系统调用
  2. React-Native android在windows下的踩坑记
  3. eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错? java.lang.ClassNotFoundException: com.branchitech.app.startup.AppStartupContextListener java.lang.ClassN
  4. netstat命令的常见用法(转)
  5. MVC - 18.缓存
  6. workerman 的回调函数
  7. jQuery的简单入门练习
  8. 可进行JavaScript代码测试与调试的12个网站
  9. update语句
  10. 自动布局AutoLayout
  11. 在JS中调用JAVA变量
  12. Ansible 运维自动化 ( 配置管理工具 )
  13. golang自定义路由控制实现(一)
  14. 视觉显著性简介 Saliency Detection
  15. kinect 深度图与彩色图对齐程序
  16. Linux网络编程学习(一) ----- 概论和Linux模型(第一章第二章)
  17. Caltech数据使用详情
  18. alibaba fastjson TypeReference 通过字符串反射返回对象
  19. VIM选择文本块/复制/粘贴
  20. 获得硬盘的ID序列号(XE10.1+WIN8.1)

热门文章

  1. 洛谷 P1060开心的金明
  2. Java之同步方法处理实现Runnable接口的线程安全问题
  3. vscode Cannot edit in read-only editor.
  4. ZJNU 1223 - 素数距离——高级
  5. c#为什么要用事物
  6. C语言实现整数转字符串
  7. goweb-goweb基础
  8. JS实现遮罩层
  9. IIS设置禁止某个IP或IP段访问网站的方法
  10. Thinkphp中js报错,Uncaught SyntaxError: Unexpected token }