JDK中String類的原始碼分析 一

2022-08-17 05:51:14 字數 1668 閱讀 6033

1、string類是final的,不允許被繼承

1

/**the value is used for character storage. */2

private

final

char

value;34

/**cache the hash code for the string */5

private

int hash; //

default to 0

string類的內部就是維護了乙個char陣列;

2、構造方法,只需要看兩個接受char陣列的構造方法

1

public string(char

value) 45

public string(char value, int offset, int

count)

9if (count < 0)

12//

note: offset or count might be near -1>>>1.

13if (offset > value.length -count)

16this.value = arrays.copyofrange(value, offset, offset+count);

17 }

這兩個構造方法都用到了,arrays工具類的copyof方法,在這兩個方法裡面都呼叫了system.arraycopy方法;

因為system.arraycopy是乙個系統本地方法,所以這個方法的效率很高,所以在構造string的時候效率也很高;

3、常用的length,charat方法

通過第一條,很容易知道,這兩個方法,實際上就是在操作char陣列

1

public

intlength() 45

public

boolean

isempty() 89

public

char charat(int

index)

13return

value[index];

14 }

4、getbytes方法

呼叫了stringcoding.encode方法,encode方法呼叫另外乙個過載的方法

1

static

byte encode(char ca, int off, int

len) catch

(unsupportedencodingexception x)

9try

catch

(unsupportedencodingexception x)

21 }

得到乙個位元組陣列,是由iso-8859-1編碼得到,當然也可以用其他編碼

5、compareto方法

因為string實現了comparable介面,所、所以必須實現compareto方法

1

public

intcompareto(string anotherstring)

15 k++;16}

17return len1 -len2;

18 }

其實是遍歷的比較兩個陣列

JDK原始碼解析 String類

equals方法相信大家都比較熟悉和了解了,string的equals方法主要用來比較string物件內容序列的異同,原始碼如下 public boolean equals object anobject 判斷是否是string型別 if anobject instanceof string ret...

JDK中String類的原始碼分析 二

1 startswith string prefix,int toffset 方法 包括startswith endswith 方法,都是呼叫上述乙個方法 1 public boolean startswith string prefix,int toffset 11while pc 0 15 16...

JDK 10 原始碼之String類

一 成員變數 1 stable 表示安全,該欄位不會為null。private final byte value 位元組陣列儲存字串的值 2 cache the hash code for the string private int hash default to 0 3 private fina...