Java String類(lèi)為什么是final的?

答:1.為了實(shí)現(xiàn)字符串池

? ? ? ? 2.為了線程安全

? ? ? ? 3.為了實(shí)現(xiàn)String可以創(chuàng)建HashCode不可變性

? ? 首先你要理解final的用途定欧,在分析String為什么要用final修飾辈双,final可以修飾類(lèi),方法和變量馏段,并且被修飾的類(lèi)或方法轩拨,被final修飾的類(lèi)不能被繼承,即它不能擁有自己的子類(lèi)院喜,被final修飾的方法不能被重寫(xiě)亡蓉, final修飾的變量,無(wú)論是類(lèi)屬性喷舀、對(duì)象屬性砍濒、形參還是局部變量,都需要進(jìn)行初始化操作硫麻。

在了解final的用途后爸邢,在看String為什么要被final修飾:主要是為了”安全性“和”效率“的緣故。

查看JDK String的源碼


final修飾的String拿愧,代表了String的不可繼承性杠河,final修飾的char[]代表了被存儲(chǔ)的數(shù)據(jù)不可更改性。但是:雖然final代表了不可變,但僅僅是引用地址不可變券敌,并不代表了數(shù)組本身不會(huì)變,請(qǐng)看下面圖片唾戚。


? ? final也可以將數(shù)組本身改變的,這個(gè)時(shí)候陪白,起作用的還有private颈走,正是因?yàn)閮烧弑WC了String的不可變性。

? ? 那么為什么保證String不可變呢,因?yàn)?b>只有當(dāng)字符串是不可變的咱士,字符串池才有可能實(shí)現(xiàn)立由。字符串池的實(shí)現(xiàn)可以在運(yùn)行時(shí)節(jié)約很多heap空間,因?yàn)椴煌淖址兞慷贾赶虺刂械耐粋€(gè)字符串序厉。但如果字符串是可變的锐膜,那么String interning將不能實(shí)現(xiàn),因?yàn)檫@樣的話弛房,如果變量改變了它的值道盏,那么其它指向這個(gè)值的變量的值也會(huì)一起改變。


? ? 如果字符串是可變的文捶,那么會(huì)引起很?chē)?yán)重的安全問(wèn)題荷逞。譬如,數(shù)據(jù)庫(kù)的用戶名粹排、密碼都是以字符串的形式傳入來(lái)獲得數(shù)據(jù)庫(kù)的連接种远,或者在socket編程中,主機(jī)名和端口都是以字符串的形式傳入顽耳。因?yàn)樽址遣豢勺兊淖狗螅运闹凳遣豢筛淖兊模駝t黑客們可以鉆到空子射富,改變字符串指向的對(duì)象的值膝迎,造成安全漏洞。


? ? 因?yàn)樽址遣豢勺兊囊群模?b>是多線程安全的限次,同一個(gè)字符串實(shí)例可以被多個(gè)線程共享。這樣便不用因?yàn)榫€程安全問(wèn)題而使用同步柴灯。字符串自己便是線程安全的卖漫。


? ? 因?yàn)樽址遣豢勺兊模栽谒鼊?chuàng)建的時(shí)候HashCode就被緩存了弛槐,不需要重新計(jì)算。這就使得字符串很適合作為Map中的鍵依啰,字符串的處理速度要快過(guò)其它的鍵對(duì)象乎串。這就是HashMap中的鍵往往都使用字符串。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市叹誉,隨后出現(xiàn)的幾起案子鸯两,更是在濱河造成了極大的恐慌长豁,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钝侠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡酸舍,警方通過(guò)查閱死者的電腦和手機(jī)帅韧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忽舟,“玉大人淮阐,你說(shuō)我怎么就攤上這事叮阅。” “怎么了泣特?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵浩姥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我群扶,道長(zhǎng),這世上最難降的妖魔是什么缴饭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任骆莹,我火速辦了婚禮,結(jié)果婚禮上幕垦,老公的妹妹穿的比我還像新娘。我一直安慰自己先改,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布貌嫡。 她就那樣靜靜地躺著,像睡著了一般岛抄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夫椭,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天蹭秋,我揣著相機(jī)與錄音扰付,去河邊找鬼感凤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛禽翼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闰挡,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼礁哄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了桐绒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咧叭,失蹤者是張志新(化名)和其女友劉穎烁竭,沒(méi)想到半個(gè)月后菲茬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體派撕,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡终吼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了际跪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛙粘。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡威彰,死狀恐怖穴肘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情评抚,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布邢笙,位于F島的核電站侍匙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏想暗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一杨箭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧互婿,春花似錦辽狈、人聲如沸慈参。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)僧凤。三九已至元扔,卻和暖如春躯保,著一層夾襖步出監(jiān)牢的瞬間澎语,已是汗流浹背验懊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工尸变, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人召烂。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像怕篷,于是被迫代替她去往敵國(guó)和親酗昼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子廊谓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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