为什么80%的码农都做不了架构师?>>>   

今天开发中遇到一个问题:

需要将一个对象进行clone,对他的副本的属性进行修改,供一个特定的对象使用,完成某个需求。

平时对java的clone看的不是很多,相当然的使用了Object的clone()方法:

SomObject obj = new SonObject();

SomObject objClone =obj.clone();

结果发现更新obj的某个成员变量的时候(ArrayList),objClone中的成员变量也相应的发生变化!但是obj.hashCode() 却不等于objClone.hashCode(),说明他们并没有指向同一个对象!看到这个结果一下子蒙了,这是为什么呢??

仔细想了一下,恍然大悟:java中的clone是浅拷贝,只是拷贝对象本身,以及基本数据类型,对于对象的非基本数据类型变量,比如ArrayList等,并不进行拷贝!

---------
public class SomObject implements Cloneable{

private List wifeList;

private int count;

....

public Object clone(){
        try{
            return super.clone();
        }catch(....){
            ....
        }
        return null;
    }
}

SomObject obj = new SomObject();

obj.setCount(1);
obj.setWifeList(new ArrayList("Beautifule"));

SomObjec cloneObj = (SomObject)obj.clone();

obj.setCount(2);
obj.setWifeList(new ArrayList("Tender"));

System.out.println(obj.getCount());//结果 2
System.out.println(obj.getWifeList().get(0));//Tender

System.out.println(cloneObj.getCount());//结果 1
System.out.println(cloneObj.getWifeList().get(0));//Tender

深度clone

public Object clone(){
        try{
         SomObject s = (SomObject)super.clone;
         s.wifeList = (ArrayList)wifeList.clone;
            return s;
        }catch(....){
            ....
        }
        return null;
    }

转载于:https://my.oschina.net/play/blog/4511

今天工作中碰到一个clone的问题相关推荐

  1. java中记忆深刻的问题_工作中碰到比较印象深刻的问题(面试必问)

    面试官经常会问到这么一个问题.有些人可能有些误区认为我们工作中碰到的问题都必须是很牛的技术来解决了才能说出来.其实不是的,我们工作中碰到的任何难点都只是在解决办法上的思想上没有打通而已. 举个例子: ...

  2. 实际工作中,一个完整的可视化大屏项目有哪些步骤?

    这两年数据可视化大屏成为了各家公司的网红,老板动不动开口就要"酷炫大屏",大屏的应用场景确实很多,不仅能实时监控重点数据,提高决策效率,放在公司会议室,展台等地方,还能提升公司形象 ...

  3. uploadify html5 java_工作中碰到uploadify插件两个版本:HTML5和Flash

    最近工作中碰到上传文件插件使用问题:在工作中碰到app嵌套html5页面中使用上传文件问题,因为之前使用的是stream上传插件(http://www.twinkling.cn/),但是该插件跨域传输 ...

  4. mysql工作中遇到的问题_mysql - 工作中碰到的问题

    1. 建立一张临时表,将多个表的内容暂时存储,然后再用这张表中的数据为条件去操作另外一张表. 注意每次执行此语句时,如果数据量很大,不建议使用.建议建立一张真实的表来存储. with rr as (w ...

  5. 测试工作中发现一个bug,而开发人员说不是一个bug,你该怎么处理?

    说法一: 1.首先明确开发说不是bug的理由. 2.如果是需求变更, 那就找产品经理确认是否是需求变更. 3.如果开发说测试环境问题, 让他说明清楚测试环境问题是什么,按照他说的验证一遍, 如果确实如 ...

  6. 工作中碰到的Java问题整理及解决方案

    1.SOH分隔符(Notepad++) SOH是ASCII码表为ASCII值==1的控制字符(不可见)char字符:0x01 完整ASCII码表见:https://www.cnblogs.com/my ...

  7. 工作中如何做好技术积累

    引言 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是"家常便饭",同时互联网技术又日新月异,很多工程师都疲 ...

  8. 工作中如何做好技术积累『转载-保持学习的空杯心态』

    引言 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是"家常便饭",同时互联网技术又日新月异,很多工程师都疲 ...

  9. 如何在繁忙的工作中,做好技术积累?

    引言 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是"家常便饭",同时互联网技术又日新月异,很多工程师都疲 ...

最新文章

  1. 中了Globelmposter3.0,后缀为4444怎么解决勒索病毒解密
  2. 电脑微信多开方法_微信电脑端多开方法
  3. 线性变化和非线性变化
  4. 使用计算机的好处,电脑的好处
  5. 金融危机只是世界统一的第三步
  6. 使用.NET类库操作CSV文件
  7. opencart卸载语言包要记得在后台进行设置否则会出错
  8. matlab程序员得浪漫,程序员的浪漫:教你如何用MATLAB向女生表白
  9. C及C++中的一些基础知识点(持续更新)
  10. OpenCV-图像锐化
  11. Rails2.2新特性:本地化与国际化
  12. 闲置android平板电脑,让闲置的iPad / Android平板电脑成为计算机屏幕的扩展监视器!...
  13. c语言mooc gps数据处理的数据_利用智能手机GPS测量地球半径
  14. 如何利用COOC软件绘制动态交互图?
  15. php jquery 时间轴,关于jQuery插件Timelinr 实现时间轴特效
  16. 人体神经元结构示意图,神经细胞内部结构图
  17. 【组合数学】指数生成函数 ( 指数生成函数概念 | 排列数指数生成函数 = 组合数普通生成函数 | 指数生成函数示例 )
  18. java基础面试题-
  19. 语义网络 - 语义网络
  20. 国内外Unity视频学习网站大全

热门文章

  1. 使用 Advanced Installer 打包 一键安装Web应用程序
  2. CANOpen状态机
  3. linux内核ufs设备树,Linux内核初始化流程笔记
  4. 索引的使用规则和设计考虑
  5. 深入源码,深度解析Java 线程池的实现原理
  6. 2020 大厂研发岗薪酬排名出炉,看完我真的拖后腿了。。。
  7. 推荐几个来自北大、南开的大神的公众号!
  8. 实惨!连各大编程语言都摆起地摊了!
  9. 【JEECG_3.7.1】Online树控件的使用
  10. 【JEECG示例文档】使用Kettle从mysql向oracle中抽取数据