String原始碼j簡單分析

2022-08-18 19:57:13 字數 2441 閱讀 6482

分析:

1、

private

final

char

value;

string內部由這個char陣列維護string的字元。首先string類用final修飾,不可繼承,其次,value用 fianl修飾,代表引用不可變。

public

string()

當呼叫無參構造方法時,將char陣列初始化為char[0]。

2、 string中的codepoint

codepoint  舉例來說: 「我」->對應的codepoint 為十進位制的25105->十六進製制的6211->unicode編碼表中的6211(「我」字在unicode編碼表中對應的16進製制數)

3、   

public

byte

getbytes(string charsetname)

throws

unsupportedencodingexception

根據某編碼格式編碼

4、equals方法

public

boolean

equals(object anobject)

if (anobject instanceof

string)

return

true

; }

}return

false

; }

5、測試兩個字串區域是否相等。

public

boolean regionmatches(int toffset, string other, int

ooffset,

intlen)

while (len-- > 0)

}return

true

; }

6、hashcode

返回此字串的雜湊碼。string物件的雜湊碼根據以下公式計算:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用int演算法,這裡s[i]是字串的第 i 個字元,n是字串的長度,^表示求冪。(空字串的雜湊值為 0。)

public

inthashcode()

hash =h;

}return

h; }

7、擷取子串,返回的是new 的string

public string substring(int

beginindex)

int sublen = value.length -beginindex;

if (sublen < 0)

return (beginindex == 0) ? this : new

string(value, beginindex, sublen);

}

8、字串拼接,返回的時new string,所以不建議多次拼接,多次拼接請選stringbuffer

public

string concat(string str)

int len =value.length;

char buf = arrays.copyof(value, len +otherlen);

str.getchars(buf, len);

return

new string(buf, true

); }

9、valueof方法要注意,如果傳進來的字串為null,則會自動new string("null")返回,否則返回物件.tostring()

public

static

string valueof(object obj)

10、intern()方法分析

返回字串物件的規範化表示形式。

乙個初始時為空的字串池,它由類 string 私有地維護。

當呼叫 intern 方法時,如果池已經包含乙個等於此 string 物件的字串(該物件由 equals(object) 方法確定),則返回池中的字串。否則,將此 string 物件新增到池中,並且返回此 string 物件的引用。

它遵循對於任何兩個字串 s 和 t,當且僅當 s.equals(t) 為 true 時,s.intern() == t.intern() 才為 true。

所有字面值字串和字串賦值常量表示式都是內部的。

返回:

乙個字串,內容與此字串相同,但它保證來自字串池中。

希望深入了解的看我的這篇文章:

String原始碼分析

前言 string類在日常開發過程中使用頻率非常高,平時大家可能看過string的原始碼,但是真的認真了解過它麼,筆者在一次筆試過程中要求寫出string的equals方法,瞬間有點懵逼,憑著大致的理解,算是寫出來了,可是下來一翻string的原始碼頓悟,原來自己寫得是多麼的low,所以有必要把這些...

原始碼分析之String

先看屬性 底層是char陣列,一目了然 可以看到,value是儲存string的內容的,即當使用string str abc 的時候,本質上,abc 是儲存在乙個char型別的陣列中的。string底層的儲存結構是乙個字元型別的陣列,同樣也是被final修飾,因此一旦這個字元陣列被建立後,value...

STL原始碼分析 string

從定義可知,string其實是base string的特化類,string使用預設的記憶體分配器 stl default allocator chart template class alloc stl default allocator chart class basic string typed...