3.AbstractStringBuilder類源碼解析

后面大家會接觸StringBuffer 和StringBuiler 這兩個前者是線程安全的,后面是線程不安全,后面我們會詳細(xì)討論,說道這兩個類都是繼承于AbstractStringBuiler,現(xiàn)在我們來詳細(xì)討論一下。

1.

兩個屬性咸产,說明內(nèi)部是以字符數(shù)組實現(xiàn)的,count是已經(jīng)使用的數(shù)組長度仲闽。

2.

兩個構(gòu)造函數(shù)脑溢,前一個無參不多說,后者構(gòu)造函數(shù)是帶容量的赖欣,值得注意的是這個是容量屑彻,和實際使用大小count做區(qū)分。

3.

顶吮、

前者是獲取當(dāng)前長度也就是之前提到的實際使用大小社牲,后者指的是初始化時的容量

3.

這個方法歸根結(jié)度就是做了一個擴(kuò)容操作,而且擴(kuò)容的套路是 2倍+2悴了, 默認(rèn)是16的容量搏恤,下一次擴(kuò)容就是34违寿,這邊擴(kuò)容比較jdk1.7多封裝了一層ensureCapacityInternal方法,進(jìn)入ensureCapacityInternal熟空,可以看到底層是復(fù)制了一個array藤巢,調(diào)用newCapacity 方法,在進(jìn)到neCapacity中息罗,可以看到這里就行了擴(kuò)容還是采取<<1 位移的方式擴(kuò)容掂咒,再往下看,底層還做了一層校驗迈喉,調(diào)用了hugeCapacity 方法俏扩,實際上是做了一層校驗,看看他有沒有溢出弊添,溢出的臨界長度是Integer的最大長度,我估計這輩子都不會遇到一次

4.

這是一個優(yōu)化方法捌木,優(yōu)化存儲空間油坝,如果長度小于容量,則縮減到剛剛好的位置刨裆。

5.

博主找了很多帖子澈圈,沒有發(fā)現(xiàn)講清楚的,博主自己理解下來帆啃,是在給他設(shè)置長度瞬女,超過部分設(shè)置成“\0”

6.

返回字符串指定位置的字符。

7.

這邊幾個方法都是涉及到代碼點的方法努潘,博主一直沒有理解代碼點诽偷,歡迎看到的人給博主評論。以下是博主搜到的對于代碼點的解釋:

碼點疯坤,我譯為“碼位值”报慕。每個碼位值實際上代表一個真正unicode字符。即unicode字符集上的碼位值压怠。

為什么要這些碼位相關(guān)的方法?源自1個java的char字符并不完全等于一個unicode的字符眠冈。

char采用UCS-2編碼是一種淘汰的UTF-16編碼,最多65536種形態(tài)菌瘫,也遠(yuǎn)少于當(dāng)今unicode擁有11萬字符的需求蜗顽。java只好對后來新增的unicode字符用2個char拼出1個unicode字符。導(dǎo)致String中char的數(shù)量不等于unicode字符的數(shù)量雨让。

8.

底層是數(shù)組的復(fù)制雇盖,value是源數(shù)組,srcBegin是起始位置栖忠,dst是目標(biāo)數(shù)組刊懈,dstBegin是目標(biāo)數(shù)組起始位置这弧,這里有一個深拷貝和淺拷貝的概念,對于一維數(shù)組來說虚汛,這種復(fù)制屬性值傳遞匾浪,修改副本不會影響原來的值。對于二維或者一維數(shù)組中存放的是對象時卷哩,復(fù)制結(jié)果是一維的引用變量傳遞給副本的一維數(shù)組蛋辈,修改副本時,會影響原來的數(shù)組将谊。

9.

是替換原來位置的字符冷溶。

10.

顯示判斷了一下是不是空,如果是空則調(diào)用appendNull()方法尊浓,放一個“null” 進(jìn)去 注意是帶上雙引號的逞频,如果不是,則調(diào)用一下ensureCapacityInternal 確認(rèn)一下容量夠不夠栋齿,不夠就增加容量苗胀,然后采用上一個我們提到的getChars的方法將value中的值復(fù)制進(jìn)str

11.

這三個和上面的都是一個套路,這里就不在贅述了瓦堵。

12.

先判斷是不是越界了基协,然后擴(kuò)容一個套路,然后從start位置開始到end菇用,一個一個charAt 丟到value 里面澜驮。

13.

套路一樣,底層走arraycopy? 注意淺拷貝和深拷貝

14.

塞入 “true”“false” 注意兩個雙引號惋鸥。

15.

后面都很好理解杂穷,但是前面的if 判斷樓主看了一頭霧水,為什么要加怎么一次校驗卦绣,樓主查了一次亭畜,大概是怎么一個意思。計算機(jī)內(nèi)部負(fù)數(shù)做比較的時候迎卤,才用取反再加一的形式拴鸵。所以會有相等的局面出現(xiàn),這個判斷就是為了解決這個問題蜗搔。

16.

調(diào)用了FloatingDecimal的appendTo 方法劲藐,不在贅述。

17.

刪除樟凄,底層把要的那部分復(fù)制到新的array中即可

18.

附加碼位值聘芜,上面有提到碼位值的概念,不在贅述缝龄,代碼總體思路還是一致的汰现,先擴(kuò)容在加挂谍。

19.

不贅述

20.

替換從start開始end 結(jié)束 ,實際上從end開始(也就是移除后的位置)瞎饲,賦給start+len(留足str的空間)口叙,長度是剩下的長度

21.

從起始位置開始到結(jié)束位置全部截掉。

22.

在index位置處嗅战,插入str offset開始妄田,len長度的串,底層arraycopy

23.

主要走的第二個方法驮捍,底層還是arrayCopy方法疟呐。

24.

換湯不換藥,其他類想valueOf轉(zhuǎn)成String 就一樣了

25.

從fromIndex 開始查找str 返回第一個的下標(biāo)东且,沒有就返回-1

26.

一樣的配方启具,翻過來,

27.

看一下是否有寬字符珊泳,如果有就轉(zhuǎn)換過去鲁冯。

28.

調(diào)的基類object中的toString

29.

返回value值


PS:哪里不對可以在評論中指出,我都會一個個看的旨椒,覺得少東西也可以評論中提出來,我會做補(bǔ)充堵漱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末综慎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子勤庐,更是在濱河造成了極大的恐慌示惊,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愉镰,死亡現(xiàn)場離奇詭異米罚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)丈探,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進(jìn)店門录择,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碗降,你說我怎么就攤上這事隘竭。” “怎么了讼渊?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵动看,是天一觀的道長。 經(jīng)常有香客問我爪幻,道長菱皆,這世上最難降的妖魔是什么须误? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮仇轻,結(jié)果婚禮上京痢,老公的妹妹穿的比我還像新娘。我一直安慰自己拯田,他們只是感情好历造,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著船庇,像睡著了一般吭产。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸭轮,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天臣淤,我揣著相機(jī)與錄音,去河邊找鬼窃爷。 笑死邑蒋,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的按厘。 我是一名探鬼主播医吊,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逮京!你這毒婦竟也來了卿堂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤懒棉,失蹤者是張志新(化名)和其女友劉穎草描,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體策严,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡穗慕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妻导。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逛绵。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖倔韭,靈堂內(nèi)的尸體忽然破棺而出暑脆,到底是詐尸還是另有隱情,我是刑警寧澤狐肢,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布添吗,位于F島的核電站,受9級特大地震影響份名,放射性物質(zhì)發(fā)生泄漏碟联。R本人自食惡果不足惜妓美,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲤孵。 院中可真熱鬧壶栋,春花似錦、人聲如沸普监。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凯正。三九已至毙玻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間廊散,已是汗流浹背桑滩。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留允睹,地道東北人运准。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像缭受,于是被迫代替她去往敵國和親胁澳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)米者,也就是一...
    悟名先生閱讀 4,116評論 0 13
  • 一韭畸、基礎(chǔ)知識:1、JVM塘雳、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,365評論 0 4
  • 端午節(jié)陆盘,帶著兒子回了趟家普筹。 入夜败明,坐在屋檐下看書,漸漸的太防,看不下去了妻顶。 此刻辛苦勞累了一天的媽媽陪著兒子睡著了,爸...
    楊楊xx閱讀 160評論 4 2
  • 絕大多數(shù)人都有這樣的感覺,工作的時候酿愧,精力不集中效率低沥潭;休息的時候,即便睡了很長時間仍舊乏力嬉挡,究其根本原因钝鸽,是方法...
    艾問才會贏閱讀 327評論 0 4
  • 本次五天的培訓(xùn)拔恰,每天結(jié)束都有一個PK晉級賽,晉級賽是自愿報名的,但是晉級比例不算多叁巨。要換著以前學(xué)習(xí)避诽,這種場合我肯...
    云沐媽媽閱讀 299評論 1 0