StringBuilder類的作用,以及與String類的相互轉換


# 轉載請留言聯系

先看一段String類的字符串拼接的代碼。

String s = "hello" 會在常量池開辟一個內存空間來存儲”hello"。

s += "world"會先在常量池開辟一個內存空間來存儲“world"。然后再開辟一個內存空間來存儲”helloworld“。

這么以來,001與002就成為了垃圾內存空間了。這么簡單的一個操作就產生了兩個垃圾內存空間,如果有大量的字符串拼接,將會造成極大的浪費。

 

  • StringBuilder

StringBuilder類是一個可變的字符序列。

構造方法摘要:

StringBuilder()
          構造一個不帶任何字符的字符串生成器,其初始容量為 16 個字符。
StringBuilder(CharSequence seq)
          構造一個字符串生成器,它包含與指定的 CharSequence 相同的字符。
StringBuilder(int capacity)
          構造一個不帶任何字符的字符串生成器,其初始容量由 capacity 參數指定。
StringBuilder(String str)
          構造一個字符串生成器,並初始化為指定的字符串內容。

 

StringBuilder類的幾個常用方法:

append(任意類型)  追加到字符串后面

reverse 反轉字符串

insert(int offset, 任意類型)  在某個index后插入字符串

toString()  返回String類的對象

 

  • StringBuilder的作用

上面的例子可以知道String類的字符串拼接會產生大量的垃圾內存空間。但是StringBuilder的字符串拼接是直接在原來的內存空間操作的,即直接在hello這個內存空間把hello拼接為helloworld。

來證明下:

public class StringBuilderTest {
    public static void main(String[] args){
        StringBuilder sb = new StringBuilder();
        StringBuilder sb2 = sb.append("hello");
        System.out.println(sb);
        System.out.println(sb2);
        // 引用類型,判斷的是他們的內存地址是否一樣
        System.out.println(sb == sb2);
    }
}

輸出結果是:

hello
hello
true

 

  • String類與StringBuilder類的相互轉換

1.String類轉換為StringBuilder類

public class String12 {
    public static void main(String[] args){
        String s = "hello";
        StringBuilder sb = new StringBuilder(s);
        System.out.println(sb);
    }
}

2.StringBuilder類轉換為String類

public class String12 {
    public static void main(String[] args){
        StringBuilder sb = new StringBuilder();
        sb.append("abc").append("efg");
        String s = sb.toString();
        System.out.println(s);
    }
}

 

補充:

StringBuilder類和StringBuffer類的區別是:

StringBuffer類是線程安全的,StringBuilder類不是。雖然StringBuffer類比較安全,但是慢。StringBuilder類相反。一般StringBuilder用得多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM