在 Java 開發中,字符串操作是最基礎也最頻繁的任務之一。掌握 String 與 StringBuffer 的創建機制、常用方法及其異同,對於編寫高效、健壯的代碼至關重要。本文將系統梳理這兩大核心類的關鍵知識點。
"abc")或 new String() 創建。字面量會進入字符串常量池,而 new 則在堆上分配新對象。new StringBuffer() 實例化,初始容量默認 16 字符。以下方法均不會修改原字符串,而是返回新對象:
length():返回字符長度charAt(int index):獲取指定索引字符getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):複製字符到目標數組equals(Object anObject) / equalsIgnoreCase(String anotherString):內容比較startsWith(String prefix) / endsWith(String suffix):前綴/後綴判斷indexOf(int ch) / lastIndexOf(int ch):查找字符/子串位置substring(int beginIndex) / substring(int beginIndex, int endIndex):截取子串concat(String str):字符串拼接replace(char oldChar, char newChar):字符替換valueOf(Object obj):靜態方法,將各類型轉為字符串所有方法均直接修改當前對象,支持鏈式調用:
length() / capacity():當前長度與容量setLength(int newLength):設置長度(截斷或補零)charAt(int index) / getChars(...):同 Stringappend(...):追加各類型數據(核心拼接方法)insert(int offset, ...):指定位置插入reverse():反轉字符序列replace(int start, int end, String str):區間替換delete(int start, int end) / deleteCharAt(int index):刪除操作substring(int start) / substring(int start, int end):返回新 String 對象| 維度 | String | StringBuffer |
|---|---|---|
| 可變性 | 不可變 | 可變 |
| 線程安全 | 天然安全 | 同步方法,安全但有開銷 |
| 拼接性能 | 頻繁拼接產生大量臨時對象 | 高效,推薦大量拼接場景 |
| 適用場景 | 常量、少量操作、作為 Map Key | 頻繁修改、構建動態字符串 |
注意:JDK 5+ 引入 StringBuilder,API 與 StringBuffer 一致但非線程安全,單線程下性能更優,應優先考慮。
substring():String 返回新 String;StringBuffer 返回新 String(不影響原對象)。length():語義一致,但 StringBuffer 另有 capacity() 區分邏輯長度與物理容量。charAt()、getChars():行為一致。理解這些細節,能幫助你在實際開發中做出正確選擇,避免性能陷阱,編寫更專業的 Java 代碼。