【Java】JDK源碼分析——StringBuilder

一.概述

StringBuilder是java中用來處理字符串的類。不同於String,StringBuilder保存的字符串可以進行修改,拼接,刪除等操作。StringBuilder是線程不安全的。
StringBuilder.java中的相關代碼:

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

1.StringBuilder被final修飾,不能被繼承。
2.繼承了AbstractStringBuilder,StringBuilder中的方法基本都是通過AbstractStringBuilder實現。
3.實現了java.io.Serializable接口,可以進行序列化。
4. 實現了CharSequence接口,可以將字符串當成一個一個的字符處理。

二.源碼分析

1.全局變量

StringBuilder.java中的相關代碼:

static final long serialVersionUID = 4383685877147921099L;

StringBuilder中只有一個全局變量serialVersionUID,用於序列化。

2.常用的構造方法

1)無參數

StringBuilder.java中的相關代碼:

	public StringBuilder() {
    	super(16);
	}

默認情況下,調用構造方法,會調用父類的構造方法,分配一個容量爲16個字符空間。

2)參數爲int

StringBuilder.java中的相關代碼:

    public StringBuilder(int capacity) {
        super(capacity);
	}

調用父類方法,指定需要分配的空間的大小來進行分配。

3)參數爲String

StringBuilder.java中的相關代碼:

	public StringBuilder(String str) {
    	// 分配空間
        super(str.length() + 16);
        // 保存字符串
        append(str);
	}

調用父類的方法,爲字符串分配空間,同時再多分配出來16個字符大小的空間,防止之後字符串長度發生改變;保存字符串。

3.append方法

在當前字符串後拼接一個字符串。
StringBuilder.java中的相關代碼:

    @Override
    public StringBuilder append(Object obj) {
        return append(String.valueOf(obj));
	}

調用了參數爲String的重載方法。
StringBuilder.java中的相關代碼:

    @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
	}

調用父類的方法append方法,返回。
其它參數類型的append方法,也都是通過調用父類的append方法實現。

4.delete方法

刪除指定長度的字符串。
StringBuilder.java中的相關代碼:

    @Override
    public StringBuilder delete(int start, int end) {
        super.delete(start, end);
        return this;
	}

調用父類的delete方法,返回。

5.replace方法

將原字符串中start和end之間的字符替換爲str。
StringBuilder.java中的相關代碼:

    @Override
    public StringBuilder replace(int start, int end, String str) {
        super.replace(start, end, str);
        return this;
	}

調用父類的replace方法,返回。

6. insert方法

在原字符串offset位置插入字符串str。
StringBuilder.java中的相關代碼:

    @Override
    public StringBuilder insert(int offset, String str) {
        super.insert(offset, str);
        return this;
	}

調用父類的insert方法,返回。
其它參數形式的insert方法,也都是通過調用父類的insert方法實現。

7.indexOf方法

返回源字符串中str字符串首次出現的位置。
StringBuilder.java中的相關代碼:

    @Override
    public int indexOf(String str) {
        return super.indexOf(str);
	}

調用並返回父類的indexOf方法。
其它參數形式的indexOf方法,也都是通過調用父類的indexOf方法實現。

8.reverse方法

將字符串進行反轉。
StringBuilder.java中的相關代碼:

    @Override
    public StringBuilder reverse() {
        super.reverse();
        return this;
	}

調用父類的reverse方法,返回。

9.toString方法

將StringBuilder對象轉換爲String對象。
StringBuilder.java中的相關代碼:

    @Override
    public String toString() {
        return new String(value, 0, count);
	}

創建並返回新的String對象。

10.writeObject方法

對StringBuilder對象進行序列化。
StringBuilder.java中的相關代碼:

    private void writeObject(java.io.ObjectOutputStream s)
        throws java.io.IOException {
        s.defaultWriteObject();
        // 保存當前已經使用的空間大小
        s.writeInt(count);
        // 保存當前的字符數組
        s.writeObject(value);
	}

11.readObject方法

對StringBuilder對象進行反序列化。
StringBuilder.java中的相關代碼:

    private void readObject(java.io.ObjectInputStream s)
        throws java.io.IOException, ClassNotFoundException {
        s.defaultReadObject();
        // 獲取已經使用的空間大小
        count = s.readInt();
        // 獲取保存的字符數組
        value = (char[]) s.readObject();
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章