雙引號括住的字元序列:"Hello World!"。編譯器自動建立 String 物件並存入字串常量池。
new String() // 空字串
new String(char[] value) // 字元陣列
new String(char[] value, int offset, int count) // 部份字元陣列
new String(byte[] bytes, int hibyte) // 位元組陣列(高位元組)
new String(String original) // 複製既有字串
char[] c1 = {'a','b','c'};
char[] c2 = {'a','b','c','d','e'};
byte[] b1 = {97,98,99};
byte[] b2 = {97,98,99,100,101};
String s1 = new String(c1);
String s2 = new String(c2, 0, 3);
String s3 = new String(b1, 0);
String s4 = new String(b2, 0, 0, 3);
new StringBuffer() // 容量 16 字元
new StringBuffer(int capacity) // 指定初始容量
new StringBuffer(String str) // 依字串內容建立,額外預留 16 字元
length():字元數charAt(int index):指定索引字元indexOf(int ch / String str [, int fromIndex]):首次出現位置lastIndexOf(...):最後出現位置getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):複製字元到陣列getBytes(...):複製位元組到陣列toCharArray():轉為字元陣列length()、charAt()、getChars():用法同 Stringcapacity():取得目前緩衝區容量(通常 ≥ length)concat(String str):連接字串replace(char old, char new):取代字元substring(int begin [, int end]):擷取子字串toLowerCase() / toUpperCase():大小寫轉換append(String str):尾端附加insert(int offset, String str):指定位置插入setCharAt(int index, char ch):設定指定索引字元關鍵差異:String 操作產生新物件,原物件不變;StringBuffer 直接修改內部緩衝區,超過容量自動擴充。
equals(Object obj):比較內容是否相同equalsIgnoreCase(String str):忽略大小寫比較內容==:比較參考位址(是否同一物件),不可用於比較內容。所有類別繼承 Object.toString(),建議覆寫以提供有意義的字串表示。
String s = "He is " + age + " years old.";
// 編譯器轉換為:
String s = new StringBuffer("He is ").append(age).append(" years old.").toString();
Java 僅對 + 進行運算子多載,其他運算子不支援多載。
StringBuilder(單執行緒)或 StringBuffer(多執行緒)。+ 或 concat,會產生大量暫時物件導致 GC 壓力。