Java學習筆記(四)String、StringBuilder、StringBuffer

String

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence 
  • String類屬於Object的子類
  • String實現的接口有:Serializable(序列化), Comparable(可排序), CharSequence(對字符序列提供只讀訪問)
  • String類的實例用來描述使用雙引號包裹的字面量
  • String類使用final修飾,不可更改
  • 每一個修改String對象的方法,實際上都創建了一個新的String對象,其中包含新的字符串內容



StringBuilder

public final class StringBuilder
	extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence

abstract class AbstractStringBuilder 
	implements Appendable, CharSequence {
	
	/**
     * The value is used for character storage.
     */
    char[] value;

    /**
     * The count is the number of characters used.
     */
    int count;

	...
}

public interface Appendable
  • StringBuilder是AbstractStringBuilder的子類
  • AbstractStringBuilder是抽象類,實現的接口有Appendable(對字符序列提供追加內容操作)、CharSequence(對字符序列提供只讀訪問)
  • StringBuilder實現的接口有Serializable(序列化), CharSequence(對字符序列提供只讀訪問)
  • 字符串的值、字符數量保存於AbstractStringBuilder中
  • 線程不安全



StringBuffer

public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence{

	/**
     * A cache of the last value returned by toString. Cleared
     * whenever the StringBuffer is modified.
     */
    private transient char[] toStringCache;

	....
	
	@Override
    public synchronized String toString() {
        if (toStringCache == null) {
            toStringCache = Arrays.copyOfRange(value, 0, count);
        }
        return new String(toStringCache, 0, count);
    }
   
   	....
}
  • StringBuffer類繼承關係與StringBuilder相同
  • 與StringBuilder區別在與,StringBuffer對字符操作的相關方法都使用synchronized同步鎖修飾,對StringButter操作是線程安全的
  • StringBuffer中維護了一個字符序列緩存toStringCache ,用來緩存最近一次toString方法執行之後的內容
  • 如果toStringCache爲空,就使用保存於AbstractStringBuilder中的字符數組value,以及字符數量count,結合Arrays.copyOfRange方法,生成一份value的複製,保存於toStringCache中
  • 如果toStringCache不爲空,調用toString()時,就直接使用toStringCache創建一個String對象,作爲toString()方法的返回值
  • 在對內容執行修改之前,緩存toStringCache會被清空,只有在toString()方法執行時,纔會更新toStringCache的值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章