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

Java 包裝類不可變性深度解析

     編輯:程式設計疑難解答

核心概念

Integer a = 21; a = 22; 這裡發生的是:

  1. Integer.valueOf(21) 返回常量池中 21 的緩存對象,引用賦給 a(棧上)。
  2. a = 22 觸發自動拆箱/裝箱:Integer.valueOf(22) 獲取 22 對象引用,a 指向新對象,原 21 對象未變,只是無引用指向,待 GC 回收。

「不可變」的真實含義

  • 包裝類對象一旦創建,其內部 value 字段 final,無任何方法可修改該值。
  • 所有看似修改值的操作(++、+、賦值)實際都是創建新對象並讓引用指向新對象。

內存圖示

棧: a  ──────► 堆: Integer@100 (value=21)
               Integer@200 (value=22)  ◄─── a 重新指向

理解「引用變了,對象沒變」是掌握包裝類行為的關鍵。

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