可变对象导致的诡异现象

       当时在做这么一个需求,需要统计一个应用的所有调用信息,包括各个ip的调用信息,整个应用所有的调用信息。流程大概是这样:

1.从一个rest接口读取所有的调用信息,信息包含appName、ip、count等字段。

2.转换为java的对象,每一个对象代表一个ip的调用信息。

3.有一个HashMap存放所有的对象,key值为ip值。

4.有一个特殊的key为:all,代表所有的调用信息。值为list,包含所有ip的对象。

5.聚合all的list对象,计算一个总值。

      问题来了,我当时为了节省内存,性能。采用的合并聚合的方式是把后边的值聚合到list的第一个对象中去。 最后问题的现象是:有一个ip的count和all的count一模一样。因为all和这个ip引用到了同一个对象,而all把这个对象给修改了。

现在想想,jdk把Integer、String等等对象设置为不可变的对象是多么伟大正确的事情。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查询集API 参...
    阳光小镇少爷阅读 3,858评论 0 8
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,705评论 25 709
  • 文 | 莫若吻 一、序言 自从开始使用苹果手机,如何设置自定义的手机铃声成了困扰我的难题,每次听着系统自带的铃...
    Promise_Sun阅读 10,475评论 0 2