java22(String,StringBuffer與StringBuilder)

String(字符串):

? ? ? ?在 Java 中String屬于對(duì)象,Java提供了String類來創(chuàng)建和操作字符串十拣。明哥查找了一下jdk文檔,發(fā)現(xiàn)String對(duì)象是不可被改變的(因?yàn)橛小癴inal”修飾符)

????????那么問題就來了:為什么java中字符串要被設(shè)計(jì)成不可變對(duì)象志鹃?

為什么String被設(shè)計(jì)成不可變對(duì)象夭问?

????1.字符串常量池的需求

????????字符串常量池是方法區(qū)中的一塊特別存儲(chǔ)區(qū)域。當(dāng)需要?jiǎng)?chuàng)建一個(gè)字符串時(shí)曹铃,如果它的值在字符串常量池中已存在缰趋,那么常量池中的該字符串引用將被直接返回,而不會(huì)創(chuàng)建一個(gè)新的字符串對(duì)象返回其引用。

? ??????如果字符串是可變的秘血,那么通過一個(gè)引用改變字符串的值味抖,其它該字符串對(duì)象的引用將得到錯(cuò)誤的值。

????2.緩存Hashcode

????????字符串的hashcode在java中經(jīng)常被使用灰粮,如HashMap仔涩。不可變保證了hashcode會(huì)一直相同,所以它可以緩存起來而不需要擔(dān)心改變粘舟。這也意味著熔脂,每次使用String的時(shí)候,不需要重新計(jì)算hashcode蓖乘,這使得性能更加有效锤悄,所以我們經(jīng)常會(huì)看到map的key使用字符串。

????3.線程安全

????????因?yàn)樽址遣豢勺兊募问悖允嵌嗑€程安全的零聚,同一個(gè)字符串實(shí)例可以被多個(gè)線程共享。這樣便不用因?yàn)榫€程安全問題而使用同步些侍。字符串自己便是線程安全的隶症。

例1:

????????更多String類支持的方法

StringBuffer和StringBuilder?:

????????當(dāng)對(duì)字符串進(jìn)行修改的時(shí)候,需要使用StringBuffer和StringBuilder類岗宣。和String類不同的是StringBuffer和 StringBuilder類的對(duì)象能夠被多次的修改蚂会,并且不產(chǎn)生新的未使用對(duì)象。

????????StringBuilder類在Java5中被提出耗式,它和StringBuffer之間的最大不同在于StringBuilder的方法不是線程安全的(不能同步訪問)胁住。

????????由于StringBuilder相較于StringBuffer有速度優(yōu)勢(shì),所以多數(shù)情況下建議使用StringBuilder類刊咳。然而在應(yīng)用程序要求線程安全的情況下彪见,則必須使用 StringBuffer 類。

????????Java StringBuffer 和 StringBuilder 類手冊(cè)

三者間的區(qū)別:

? ? ? ? 我們每次對(duì)String類型進(jìn)行改變的時(shí)候其實(shí)都等同于生成了一個(gè)新的 String 對(duì)象娱挨,然后將指針指向新的 String 對(duì)象余指,所以經(jīng)常改變內(nèi)容的字符串最好不要用 String ,因?yàn)槊看紊蓪?duì)象都會(huì)對(duì)系統(tǒng)性能產(chǎn)生影響跷坝,如下圖所示酵镜,這種情況下如果jvm中的GC(垃圾回收機(jī)制)沒有回收的話,內(nèi)存中已經(jīng)產(chǎn)生了一萬(wàn)多個(gè)對(duì)象

????????而如果是使用 StringBuffer 類則結(jié)果就不一樣了柴钻,每次結(jié)果都會(huì)對(duì) StringBuffer 對(duì)象本身進(jìn)行操作淮韭,而不是生成新的對(duì)象,再改變對(duì)象引用贴届。所以在一般情況下我們推薦使用 StringBuffer 靠粪,特別是字符串對(duì)象經(jīng)常改變的情況下

????????StringBuilder與StringBuffer?相比足丢,二者之間有公共父類AbstractStringBuilder(抽象類)。因此二者間很多方法都是公用的庇配,只是StringBuffer會(huì)在方法上加synchronized關(guān)鍵字,進(jìn)行同步绍些。因此通常來說應(yīng)該優(yōu)先使用 StringBuilder 類捞慌,因?yàn)樗С炙邢嗤牟僮鳎捎谒粓?zhí)行同步柬批,所以速度更快啸澡。但是如果將 StringBuilder 的實(shí)例用于多個(gè)線程是不安全的。需要這樣的同步氮帐,則建議使用 StringBuffer 嗅虏。

總結(jié):

????1.可變與不可變

? ??????String對(duì)象不可變 StringBuilder與StringBuffer可變

????2.是否多線程安全

? ??????String,StringBuffer線程安全上沐,StringBuilder線程不安全

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末皮服,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子参咙,更是在濱河造成了極大的恐慌龄广,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕴侧,死亡現(xiàn)場(chǎng)離奇詭異择同,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)净宵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門敲才,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人择葡,你說我怎么就攤上這事紧武。” “怎么了刁岸?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵脏里,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我虹曙,道長(zhǎng)迫横,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任酝碳,我火速辦了婚禮矾踱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疏哗。我一直安慰自己呛讲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贝搁,像睡著了一般吗氏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雷逆,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天弦讽,我揣著相機(jī)與錄音,去河邊找鬼膀哲。 笑死往产,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的某宪。 我是一名探鬼主播仿村,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼兴喂!你這毒婦竟也來了蔼囊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瞻想,失蹤者是張志新(化名)和其女友劉穎压真,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蘑险,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滴肿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佃迄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泼差。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖呵俏,靈堂內(nèi)的尸體忽然破棺而出堆缘,到底是詐尸還是另有隱情,我是刑警寧澤普碎,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布吼肥,位于F島的核電站,受9級(jí)特大地震影響麻车,放射性物質(zhì)發(fā)生泄漏缀皱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一动猬、第九天 我趴在偏房一處隱蔽的房頂上張望啤斗。 院中可真熱鬧,春花似錦赁咙、人聲如沸钮莲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)崔拥。三九已至极舔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間链瓦,已是汗流浹背姆怪。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澡绩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓俺附,卻偏偏與公主長(zhǎng)得像肥卡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子事镣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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