技術文章
技術問答
My Project
iT 徵才
聊天室
2026 鐵人賽
登入/註冊
文章
問答
Tag
邦友
鐵人賽
搜尋
2026 iThome 鐵人賽
0
Build on Google AI
把Google AI當夥伴打造個人高效Coding工作流
系列 第
9
篇
第九天String不可變性與字串池
18th鐵人賽
chenuniii
2026-10-15 20:25:04
121 瀏覽
分享至
一、 字串池與儲存位置
字面量(String s = "abc"):
優先從String Pool複用既有物件;若無則在池中建立並返回,因此相同字面量的 == 結果為true。
new String("abc"):
無論池中有無相同字串,強制在一般Heap區開闢新物件,==比對結果必為false。
字串比較鐵律:
比對字串內容一律使用.equals(),絕不能用==。
架構演進:
JDK 7起將字串池從PermGen移至Java一般Heap區,避免因大量動態字串導致PermGen OOM,並讓字串能正常被GC回收。
二、 不可變性三大防線與價值
防線構建:
類別標記為final(防繼承篡改)。
底層陣列宣告為private final(外部不可見、門牌不可換)。
無公開修改方法(所有轉換操作如substring、replace皆返回全新String 物件)。
三大架構價值:
字串池共享安全:防止修改單一變數時污染其他共享該字串的變數。
天然線程安全:多執行緒間無鎖共享,完全消除併發衝突。
快取hashCode:字串內容不變,雜湊值計算一次後永久快取,大幅提升作為HashMap/HashSet Key時的查找效率。
三、 拼接效能災難:為什麼嚴禁迴圈使用+?
編譯器行為:
在執行期動態迴圈中,每次+=底層都會隱式建立一個新的StringBuilder並呼叫.toString()。
效能瓶頸:
迴圈執行 $N$ 次會瞬間在Heap產生 $2N$ 個短命物件,造成Eden區快速被塞滿,頻繁引發Minor/Full GC,導致CPU飆高與系統停頓。
四、 StringBuilder運作與擴容機制
容器選擇:單執行緒拼接一律使用StringBuilder;多執行緒併發安全才考慮 StringBuffer。
預設容量:無參數建構子預設容量為16個字元。
擴容公式:當空間不足時,新容量計算為舊容量×2+2。
效能建議:底層擴容依賴Arrays.copyOf()進行整塊連續記憶體複製與搬遷,大量拼接時務必預先指定容量,避免重複擴容拷貝的成本。
留言
追蹤
檢舉
上一篇
第八天常數與靜態的架構規範——記憶體生命週期與單例模式的三種安全寫法
下一篇
第十天例外架構體系Checked vs Unchecked、資源洩漏防禦與自訂業務例外封裝
系列文
把Google AI當夥伴打造個人高效Coding工作流
共
25
篇
目錄
RSS系列文
訂閱系列文
1
人訂閱
21
第二十一天Record語意、Sealed Classes代數型別與模式匹配完整實戰
22
第二十二天堆積記憶體分代模型、GC Root可達性分析與G1/ZGC演進
23
第二十三天線上故障排查工具箱jstack/jmap/Arthas與OOM/CPU 100%實戰定位
24
第二十四天BIO、NIO、Selector多路複用與Netty底層核心機制
25
第二十五天雙親委派模型、打破雙親委派與熱部署實踐
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
929
組
團體組數
32
組
累計文章數
20377
篇
完賽人數
534
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
18th鐵人賽
17th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
熱門問題
這樣品質的光纖工程如何驗收
Windows 10 系統還原可以倒退回來嗎?
熱門回答
Windows 10 系統還原可以倒退回來嗎?
這樣品質的光纖工程如何驗收
熱門文章
AI agent 開了 PR,為什麼團隊還是交不出去?
Day 29:【VS Code 終極配置備份】Settings Sync:一鍵同步你的所有設定、快速鍵與外掛清單!
Day 25|匯出收藏資料成 CSV
Day 28:【工作區效能與安全性】VS Code Workspace Trust 與安全沙盒機制
Day 30:三十天自主學習回顧——總結開發成果與未來改進方向
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}