java知識點總結(String,StringBuffer,StringBuilder)

String
String:字符串常量(線程安全),被聲明爲final,因此不能被繼承(Integer等包裝類也不能被繼承)。

java8中,String內部使用char數組儲存數據。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
}

在 Java 9 之後,String 類的實現改用 byte 數組存儲字符串,同時使用 coder 來標識使用了哪種編碼。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final byte[] value;

    /** The identifier of the encoding used to encode the bytes in {@code value}. */
    private final byte coder;
}

value 數組被聲明爲 final,這意味着 value 數組初始化之後就不能再引用其它數組。並且 String 內部沒有改變 value 數組的方法,因此可以保證 String 不可變

StringBuffer,StringBuilder
StringBuffer:字符串變量(線程安全),StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的數據。每個方法都能有效地將給定的數據轉換成字符串,然後將該字符串的字符追加或插入到字符串緩衝區中。append 方法始終將這些字符添加到緩衝區的末端;而 insert 方法則在指定的點添加字符。

StringBuilder:字符串變量(線程不安全),如果可能,建議優先採用該類,因爲在大多數實現中,它比 StringBuffer 要快。兩者的方法基本相同。

String,StringBuilder,StringBuffer的區別
1,可變性:

  • String(不可變)
  • StringBuffer,StringBuilder(可變)

2,線程安全:

  • String不可變,所以要線程安全。
  • StringBuffer,線程安全,內部使用 synchronized 進行同步。
  • StringBuilder,線程不安全
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章