Java中String類的常用方法源碼解析(二)

  Hello,大家好,我是Steafan,這周的工作有點忙,沒來得急更新博文,今天還差不多,所以就趕緊捉住本週的尾巴來更新博文了。今天爲大家帶來Java中對String類的常用方法源碼解析的第二篇,同時也是最後一篇。在上篇博文中,我們首先對String類中很常用的幾個方法進行了源碼分析,他們分別是:toString()方法、equals()方法、length()方法、isEmpty()方法、indexOf()方法以及 subSequence()方法。今天繼續爲大家解析剩餘的常用方法,話不多說,直入正題吧。

  六、substring()方法解析

        說到substring()方法,最令我好奇的是substring()方法的命名並沒有遵循官方定義的駝峯橋命名方法。其源碼如圖8所示:

                

                                                                    圖8 String類中substring()方法源碼截圖

substring()方法接收int類型的beginIndex和endIndex,返回經過這兩個索引值截取過後的新的String對象,也就是返回經截取後的字符串。當substring()方法被調用時,會判斷beginIndex是否小於零,如果其索引小於零則拋出字符串索引越界異常;接着會判斷endIndex的索引值,即結束時的索引,如果其大於字符串的長度,也會拋出字符串索引越界異常;如果上述檢測都通過,那麼Java編譯器會用一個subLen的變量來儲存結束索引和開始索引的差值,如果這個差值小於零,就會拋出字符串索引越界異常,否則就會調用String()構造方法並傳入value值以及開始和結束索引來生成新的String對象,也就是新的字符串。

  七、replace()方法解析

        replace()方法源碼截圖如圖9所示:

                          

                                                                圖9 String類中replace()方法源碼截圖

      replace方法接收char類型的oldChar和newChar字符,返回被截取過後的新的String對象,也就是新的字符串。當replace方法被調用時,JVM首先會判斷傳遞過來的新舊字符是否相等,如果兩個字符是相等的,那麼就不做任何處理直接返回this;如果新舊兩個字符不相等,replace方法會定義一個非空標識i,並通過while循環來迭代被替換的字符,直到將字符串的長度都迭代完畢爲止。

八、replaceAll()方法解析

      replaceAll方法源碼截圖如圖10所示:

                                                                     圖10 String類中replaceAll()方法源碼截圖

    replaceAll方法接收String類型的regex和replacement參數,返回被替換之後的新的String對象,即新的字符串。注意,這裏的regex不是我們傳入的需要被替換的字符串,而是一個正則表達式,後面的replacement則是被替換的字符串,這是一個坑,值得大家注意一下。

   當我們接收通過replace或replaceAll方法返回的結果時,我們應該通過定義局部變量的方式來接收,否則,其他方式都是接收不到任何結果的,在idea編譯器中會提示這兩個方法是isIgnored()的(被忽視的),如下示例圖1所示:

         

                                                                                            示例圖1

這個replaceStr是可以接收到的,相反,如果你把replaceStr定義爲成員變量,replace方法則將會被忽視,如下示例圖2所示:

                                

                                                                                    示例圖2

           至此,我們來歸納一下在String類中我們都介紹了哪幾個方法,如下圖11所示:

  

                                                                              圖11 String類中常用方法思維導圖     

      好了,寫到這裏,筆者對String類自己認爲用的較多的方法逐一進行了源碼層面的解析,希望能幫到大家。有很多人問我,說String這個類有什麼好解析的,應該學習像JUC啊,Integer啊這些所謂“流行”的類的解析,對此,我只能說不積跬步無以至千里,你所說的這些流行的類其實都是基於在你看到的所謂不起眼的類中的簡單的實現思路來實現的,我們要從最基礎的地方開始,一步一步地慢慢成長,才能縱向提升自我,每一棟高樓大廈都是一塊磚一塊磚的從最底層開始壘起,其中任何一塊磚除了問題都有可能影響整棟大廈的建設,更有可能會直接使大廈被摧毀。

    由於筆者水平有限,博文內容中間可能會有表達錯誤或不合規範的地方,還望各位業內人士批評指正。

    最後,感謝每一位關注我的朋友,你們的鼓勵是我寫博文最大的動力,感謝你們每一個人!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章