String原始碼閱讀總結

2021-08-18 09:48:14 字數 3016 閱讀 4964

1、charat(index) 獲取字元 , codepointat()——提取索引字元**點;

2、string 和 charsequence 關係

string 繼承於charsequence,也就是說string也是charsequence型別。

charsequence是乙個介面,它只包括length(), charat(int index), subsequence(int start, int end)這幾個api介面。除了string實現了charsequence之外,stringbuffer和stringbuilder也實現了charsequence介面。

需要說明的是,charsequence就是字串行,string, stringbuilder和stringbuffer本質上都是通過字元陣列實現的!

關係圖:

charsequence(介面)

string abstractstringbuilder(介面)

stringbuilder stringbuffer

3、contentequals(charsequence c) 、contentequals(stringbuffer sb) ;

也就是說string可以和stringbuilder、stringbuffer比較內容,還可以和實現charsequence介面的模擬較內容;

4、equalsignorecase(string anotherstring) 忽略字串大小寫比較;

5、compareto(string anotherstring)排序預設大的在前面,長度長的前面如果一樣,算大的;

string.case_insensitive_order 這個排序物件,忽略大小寫;

public int compareto(string anotherstring)

k++;

}return len1 - len2;

}測試例子:

/**

* 字串string不可變的字串,內部實現是基於char陣列,

* 1、因為只能內部訪問,所以不可變;

* 2、final類

* 3、如何實現乙個不可變類

a、將類宣告為final,所以它不能被繼承。

b、將所有的成員宣告為私有的,這樣就不允許直接訪問這些成員。

c、對變數不要提供setter方法。

d、將所有可變的成員宣告為final,這樣只能對它們賦值一次。

e、通過構造器初始化所有成員,進行深拷貝(deep copy)。

f、在getter方法中,不要直接返回物件本身,而是轉殖物件,並返回物件的拷貝。

* 4、其他的方法有,equals tolowercase split format格式化字串,可以動態的拼接字串,比如 數字 特殊字元什麼的。

* @author hz16092620

* @date 2023年4月4日 下午4:59:21

* @version

*/public class testbasestring

/*** 比較字串大小

* */

static void teststringadd()

/*** 測試trim。

* intern方法是native呼叫,它的作用是在方法區中的常量池裡通過equals方法尋找等值的物件,

* 如果沒有找到則在常量池中開闢一片空間存放字串並返回該對應string的引用,

* 否則直接返回常量池中已存在string物件的引用。

* */

static void testintern()

/*** 測試trim。

* */

static void testtrim()

/*** 測試replace。

* */

static void testreplace()

/*** 測試開頭和結尾的字元。

* */

static void teststartsandendwith()

/*** 測試拼接方法。

* */

static void testcontact()

/*** 測試++,後面的話就是先返回再計算。

* */

static void testadd()

/*** 測試charat方法、indexof。

* */

static void test()

/*** charsequence和三個實現類

*/ static void testcharsequence()

}

/**

* 字串操作的高階方法

* @author hz16092620

* @date 2023年4月8日 下午3:36:34

* @version

*/public class testseniorstring

/*** 測試字串是否回文,即前後讀都是一樣的

* */

static void teststringbuilderreverse()

} }

/*** 去除重複的字串/字元,原理就是利用stringbuilder可變的特性

* */

static void testdeleterepeatchar() }}

system.out.println(sb.tostring());

}/**

* 將兩個字串拼接,刪除

* */

static void teststringbuilder()

/*** 去除空格,方法一。

* */

static void testtrimsenior()

system.out.println(sb.tostring());

}/**

* 去除空格,方法二。

* */

static void testtrimreplaceall()

}

String原始碼閱讀(三)

public string split string regex,int limit else if no match was found,return this if off 0 return new string 如果limit大於最大返回長度,上面else中的 不會執行,在此處將最後一段放入l...

String原始碼總結

1.indexof 方法 if fromindex sourcecount if fromindex 0 if targetcount 0 char first target targetoffset int max sourceoffset sourcecount targetcount for ...

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...