1. 程式人生 > >廖雪峰Java2面向對象編程-6Java核心類-1StringBuilder

廖雪峰Java2面向對象編程-6Java核心類-1StringBuilder

面向對象編程 valueof 返回 clas append pri insert 拼接 解決

字符串操作過程中,每次用 + 拼接字符串,有以下問題:

  • 每次循環都會創建新的對象
  • 絕大部分都是臨時對象。浪費內存
  • 影響GC效率
        String s = "";
        for(int i=0;i<1000;i++){
            s = s +String.valueOf(i);
        }
        System.out.println(s);

為了解決這個問題,Java提供了StringBuilder類,可以高效的拼接字符串

1.StringBuffer類

  • StringBuilder是可變對象
  • StringBuilder可以預分配緩沖區
        StringBuilder sb = new StringBuilder(1024);
        for (int i=0;i<1000;i++){
            sb.append(String.valueOf(i));
        }
        String s = sb.toString();

2.StringBuilder可以進行鏈式操作

        String name = "Green";
        StringBuilder sb = new StringBuilder(1024);
        String s = sb.append("Mr ").append(name)
                .append("!").insert(0,"Hello,")
                .toString();
        System.out.println(s);

技術分享圖片
不需要特別改寫字符串 + 操作
編譯器在內部自動把多個連續的 + 操作優化為StringBuilder操作

3.StringBuffer:

  • StringBuilder和StringBuffer接口完全相同
  • StringBuffer是StringBuilder的線程安全版本
  • 跨線程做字符串很少見,因此沒有必要使用StringBuffer

4.總結

  • StringBuilder是可變對象,用來高效拼接字符串
  • StringBuilder可以支持鏈式操作
  • 實現鏈式操作的關鍵是返回實例本身
  • StringBuffer是StringBuilder的線程安全版本,很少使用

廖雪峰Java2面向對象編程-6Java核心類-1StringBuilder