String 不可變,每次修改產生新對象;StringBuffer 內部字符數組可擴容,原地修改,不產生中間對象,適合頻繁拼接、插入、刪除場景。JDK 5+ 引入 StringBuilder(非線程安全,性能更高),單線程首選 Builder。
StringBuffer sb = new StringBuffer(); // 空,容量 16
StringBuffer sb2 = new StringBuffer("abc"); // 含內容
StringBuffer sb3 = new StringBuffer(100); // 指定初始容量
// String → StringBuffer
StringBuffer sb4 = new StringBuffer(str);
// StringBuffer → String
String s = sb.toString(); // 唯一標準方式
| 方法 | 說明 | 範例結果 |
|---|---|---|
append(x) | 尾部追加任意類型 | sb.append(123).append(true) → "123true" |
insert(offset, x) | 指定位置插入 | sb.insert(2, "X") → "abXc" |
delete(start, end) | 刪除 [start, end) | sb.delete(1,3) → "a" |
deleteCharAt(index) | 刪除單字符 | sb.deleteCharAt(1) → "ac" |
replace(start, end, str) | 區間替換 | sb.replace(1,3,"XYZ") → "aXYZc" |
reverse() | 整體反轉 | "abc" → "cba" |
setCharAt(index, ch) | 單字符替換 | sb.setCharAt(1,'Z') → "aZc" |
setLength(len) | 截斷/擴展長度 | sb.setLength(2) → "ab" |
trimToSize() | 容量縮減至長度 | 釋放多餘數組空間 |
StringBuffer sql = new StringBuffer();
sql.append("SELECT * FROM user WHERE ")
.append("name = '").append(username).append("'")
.append(" AND age > ").append(age);
java.lang.System final 類,私有構造器,所有成員 static,不可實例化。
System.in // InputStream 標準輸入(鍵盤)
System.out // PrintStream 標準輸出(控制台)
System.err // PrintStream 標準錯誤(控制台,紅色)
// 重定向輸出到文件
System.setOut(new PrintStream(new FileOutputStream("log.txt")));
System.out.println("這行寫入文件");
| 方法 | 用途 | 範例 |
|---|---|---|
arraycopy(src, srcPos, dest, destPos, len) | 原生數組高效複製 | System.arraycopy(a,0,b,2,3) |
currentTimeMillis() | 毫秒級時間戳 | long t = System.currentTimeMillis() |
nanoTime() | 納秒級相對時間(測耗時) | long ns = System.nanoTime() |
exit(status) | JVM 退出 | System.exit(0) 正常退出 |
gc() | 建議 GC | System.gc() |
getProperty(key) | 讀系統屬性 | System.getProperty("os.name") |
setProperty(key, val) | 寫系統屬性 | System.setProperty("k","v") |
getProperties() | 所有屬性映射 | Properties p = System.getProperties() |
getenv(name) | 讀環境變量 | System.getenv("JAVA_HOME") |
identityHashCode(obj) | 對象原始 hashCode | 即使覆寫 hashCode 也返回原值 |
java.version // JDK 版本
java.home // JRE 安裝目錄
os.name // 作業系統名稱
os.version // OS 版本
user.name // 當前用戶
user.home // 用戶主目錄
user.dir // 當前工作目錄
file.separator // 文件分隔符 (/ 或 \)
path.separator // 路徑分隔符 (; 或 :)
line.separator // 換行符 (\n, \r\n)
long start = System.nanoTime();
// 待測代碼
for (int i = 0; i < 1_000_000; i++) Math.sqrt(i);
long end = System.nanoTime();
System.out.println("耗時: " + (end - start) / 1_000_000 + " ms");
String + 編譯器優化(StringConcatFactory)即可ThreadLocal 復用 Builder 或異步日志