首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 進階必修:String 類別完整指南——建立、操作、不可變性與效能

     編輯:Java 程式設計入門

前言:字串處理的基石

幾乎所有應用程式都離不開字串處理。Java 將字串設計為不可變的物件,並提供豐富的 API。本章系統梳理 java.lang.String 的建立方式、核心操作方法、不可變特性的深層含義與效能最佳實踐。

一、String 物件的建立:字面值 vs new

String 是 Java 唯一不需 new 即可建立物件的類別:

String s = "Hello World!"; // 字面值:編譯期進入字串常量池
// String s2 = new String("Hello World!"); // 不建議:強制在堆中建立重複物件
String 物件建立示意
字面值直接引用常量池物件;new 強制在堆建立新物件

最佳實踐:永遠使用字面值 "..."。new String() 僅在極少數需強制區分物件身份(== 比較)的測試場景使用。

二、核心操作方法速查表

方法說明範例
length()字串長度"abc".length() → 3
charAt(int i)指定索引字元"abc".charAt(1) → 'b'
substring(int begin, int end)子字串 [begin, end)"abcd".substring(1,3) → "bc"
indexOf(String str)子字串首次出現索引"hello".indexOf("ll") → 2
startsWith/endsWith前綴/後綴判斷"test".startsWith("te") → true
equals(Object o)內容比較(必須用此,非 ==)"a".equals("a") → true
compareTo(String o)字典序比較"a".compareTo("b") → -1
trim()移除首尾空白" hi ".trim() → "hi"
toUpperCase()/toLowerCase()大小寫轉換"Hi".toLowerCase() → "hi"
replace(old, new)字串替換(回傳新字串)"a b".replace(" ", "-") → "a-b"
split(regex)正則分割"a,b,c".split(",") → ["a","b","c"]
valueOf(...)靜態工廠:任意型別轉字串String.valueOf(123) → "123"

字串連接:+ 與 concat()

String s = "Hello" + " " + "World"; // 編譯期優化為單一字面值
String dynamic = "Hello";
dynamic += " World"; // 運行期:編譯器隱式使用 StringBuilder

三、不可變性:設計哲學與效能啟示

String 物件一旦建立,內容永不改變。所有「修改」操作(replace、toUpperCase、substring 等)實際上都是建立並回傳新物件:

String s = "Hello World!";
String s2 = s.replace("World", "Universe");
// s 仍為 "Hello World!"
// s2 為新物件 "Hello Universe!"
不可變物件示意:舊物件不變,新物件誕生
不可變模式:原物件不變,操作產生新物件,舊物件若無引用則被 GC 回收

不可變帶來的優勢

  1. 執行緒安全:多執行緒可安心共享同一字串,無需同步。
  2. 字串常量池複用:相同字面值共享單一物件,節省記憶體。
  3. HashCode 緩存:hashCode() 只需計算一次,適用於 HashMap Key。
  4. 安全性:網路路徑、資料庫連線字串等敏感資訊不可被竄改。

效能陷阱與對策

// ❌ 迴路中頻繁 + 產生大量中間物件
String result = "";
for (int i = 0; i < 10000; i++) result += i;

// ✅ 使用 StringBuilder(單執行緒)或 StringBuffer(多執行緒)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) sb.append(i);
String result = sb.toString();

四、Java API 文檔:開發者的字典

官方文檔是最權威參考:

養成查閱 API 的習慣,能避免重複造輪子、發現隱藏功能(如 join()、lines()、strip() 等新版增強)。

五、總結

  • 字串以字面值建立,自動駐留常量池。
  • 掌握核心 15+ 常用方法,特別是 equals()、substring()、split()、replace()。
  • 不可變性是特性非缺陷:帶來執行緒安全、常量池複用、HashCode 緩存。
  • 大量拼接**必須**用 StringBuilder,避免 O(N²) 物件產生。
  • 善用官方 API 文檔,掌握版本演進新特性。

進階延伸:Java 9+ 引入 Compact Strings(Latin-1 編碼節省空間)、String.lines() 流式處理、String.repeat() 等現代化 API,建議升級 JDK 後積極採用。

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