Integer a = 21; a = 22; 這裡發生的是:
Integer.valueOf(21) 返回常量池中 21 的緩存對象,引用賦給 a(棧上)。a = 22 觸發自動拆箱/裝箱:Integer.valueOf(22) 獲取 22 對象引用,a 指向新對象,原 21 對象未變,只是無引用指向,待 GC 回收。value 字段 final,無任何方法可修改該值。++、+、賦值)實際都是創建新對象並讓引用指向新對象。棧: a ──────► 堆: Integer@100 (value=21)
Integer@200 (value=22) ◄─── a 重新指向
理解「引用變了,對象沒變」是掌握包裝類行為的關鍵。