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

Java StringBuffer 與 System 類詳解:高效字符串操作與系統級工具

     編輯:Java 相關知識

StringBuffer:線程安全的可變字符串

String 不可變,每次修改產生新對象;StringBuffer 內部字符數組可擴容,原地修改,不產生中間對象,適合頻繁拼接、插入、刪除場景。JDK 5+ 引入 StringBuilder(非線程安全,性能更高),單線程首選 Builder。

構造與 String 互轉

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();                       // 唯一標準方式

核心修改方法(鏈式調用,返回 this)

方法說明範例結果
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()容量縮減至長度釋放多餘數組空間

高頻場景:SQL/日志拼接

StringBuffer sql = new StringBuffer();
sql.append("SELECT * FROM user WHERE ")
   .append("name = '").append(username).append("'")
   .append(" AND age > ").append(age);

System 類:系統級工具箱

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()建議 GCSystem.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");

StringBuilder vs StringBuffer 選型

  • 單線程、高頻拼接 → StringBuilder(無同步開銷,JDK 5+ 推薦)
  • 多線程共享緩衝區 → StringBuffer(方法同步)
  • 簡單拼接(<5 次)→ String + 編譯器優化(StringConcatFactory)即可
  • 日志框架、高併發 → 考慮 ThreadLocal 復用 Builder 或異步日志
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved