可變對象導致的詭異現象

? ? ? ?當時在做這么一個需求,需要統計一個應用的所有調用信息,包括各個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閱讀 134,837評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,740評論 18 399
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢集API 參...
    陽光小鎮少爺閱讀 3,846評論 0 8
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,841評論 25 708
  • 文 | 莫若吻 一、序言 自從開始使用蘋果手機,如何設置自定義的手機鈴聲成了困擾我的難題,每次聽著系統自帶的鈴...
    Promise_Sun閱讀 10,359評論 0 2