首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

HashMap 存儲 JavaBean 與基本類型包裝類的行為差異解析

     編輯:程式設計疑難解答

代碼中將 Integer、String、User 放入 Map<String, Object>,隨後取出修改屬性,發現 Integer 和 String 需重新 put 才能改變 Map 中的值,而 User 直接 setAge 即生效。

核心誤區

你以為修改了原對象,實際上是將變量指向了新對象。

詳解

Integer count = map.get("count"); // 取出引用指向原 Integer(1)
count = new Integer(count + 1);   // count 變量指向新 Integer(2),原 Integer(1) 未變
map.put("count", count);          // 必須 put 回去才能更新 Map

User user = map.get("user");      // 取出引用指向同一 User 物件
user.setAge(44);                  // 修改物件內部狀態,Map 中引用指向同一物件,直接生效

本質區別

  • 不可變類型(Integer, String, Long 等):任何「修改」實際是建立新對象,引用變更需重新放入 Map。
  • 可變類型(自定義 JavaBean、ArrayList, HashMap 等):通過方法修改內部狀態,引用不變,Map 內物件同步更新。

理解「引用傳值」與「物件可變性」是掌握集合操作的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved