String的最大長(zhǎng)度是多長(zhǎng)

??初看到這個(gè)問(wèn)題心里還是有點(diǎn)尷尬的,平時(shí)確實(shí)沒(méi)注意過(guò)String最大能有多長(zhǎng)。想要知道String到底有多長(zhǎng),只能從源碼層面來(lái)找答案了兔毙。
??Java中String不是基本數(shù)據(jù)類型,而是引用類型并且是final兄春。String定義為final的原因:
??高效性
??JVM在查找字符串的時(shí)候可以直接定位到String類中澎剥,更準(zhǔn)確的說(shuō)String不可變,才能實(shí)現(xiàn)常量池赶舆。
??安全性
??定義成final哑姚,不能被繼承和修改,可以防止在子類或者其他地方被修改芜茵,導(dǎo)致隱藏Bug產(chǎn)生叙量。
??上面提到常量池,JVM創(chuàng)建對(duì)象是需要開(kāi)銷的九串,為了提高性能绞佩,對(duì)字符串使用字符串常量池進(jìn)行了優(yōu)化,每當(dāng)我們創(chuàng)建一個(gè)字符串時(shí)蒸辆,Jvm先去字符串常量池檢查征炼,如果字符串常量池存在析既,直接返回實(shí)例引用躬贡;否則創(chuàng)建實(shí)例,并存入字符串常量池中眼坏。
??比如常見(jiàn)的判斷:

String a="hello";
String b="hello";

因?yàn)閍和b都是指向"hello"這個(gè)常量池中的常量拂玻,即同一個(gè)地址所以a==b 為true

String c=new String("hello");

因?yàn)閏是new了一個(gè)新對(duì)象酸些,且對(duì)象是在堆上存放,所以c==a為false檐蚜,雖然c的內(nèi)容是創(chuàng)建在堆中魄懂,但是他的內(nèi)部value還是指向JVM常量池的hello的value,它構(gòu)造hello時(shí)所用的參數(shù)依然是hello字符串常量闯第。


a市栗、b、c內(nèi)存關(guān)系(圖片來(lái)源見(jiàn)水涌榷獭)

??下面正式進(jìn)入今天的主題了填帽,String的最大長(zhǎng)度到底是多大呢?
??翻開(kāi)String類的源碼咙好,你會(huì)看到:

  // private final char value[];
    private final int count;

 public int length() {
        final boolean STRING_COMPRESSION_ENABLED = true;
        if (STRING_COMPRESSION_ENABLED) {
            // For the compression purposes (save the characters as 8-bit if all characters
            // are ASCII), the least significant bit of "count" is used as the compression flag.
            return (count >>> 1);
        } else {
            return count;
        }
    }

可以看到String的length是通過(guò)count值返回的篡腌,count是int型,最大為231-1勾效,所以String理論上最大長(zhǎng)度為231-1嘹悼,2147483647。
但是由于String底層是通過(guò)char[]字符數(shù)組來(lái)實(shí)現(xiàn)层宫,char占用兩個(gè)字節(jié)杨伙,2147483647 個(gè) char 類型就是 4294967294 字節(jié),這接近于 4GB 大小萌腿,想要申請(qǐng)這么一大塊連續(xù)的內(nèi)存空間缀台,失敗也就不足為奇了,所以和電腦的硬件條件有關(guān)哮奇。
??總結(jié)
??String 的最大長(zhǎng)度也就是字符數(shù)組的最大長(zhǎng)度膛腐,理論上最大長(zhǎng)度為 int 類型的最大值,即 2147483647鼎俘。
??在實(shí)際中哲身,一般可獲取的最大值小于理論最大值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贸伐,一起剝皮案震驚了整個(gè)濱河市勘天,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捉邢,老刑警劉巖脯丝,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伏伐,居然都是意外死亡宠进,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)藐翎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)材蹬,“玉大人实幕,你說(shuō)我怎么就攤上這事〉唐鳎” “怎么了昆庇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)闸溃。 經(jīng)常有香客問(wèn)我整吆,道長(zhǎng),這世上最難降的妖魔是什么辉川? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任掂为,我火速辦了婚禮,結(jié)果婚禮上员串,老公的妹妹穿的比我還像新娘勇哗。我一直安慰自己,他們只是感情好寸齐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布欲诺。 她就那樣靜靜地躺著,像睡著了一般渺鹦。 火紅的嫁衣襯著肌膚如雪扰法。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天毅厚,我揣著相機(jī)與錄音塞颁,去河邊找鬼。 笑死吸耿,一個(gè)胖子當(dāng)著我的面吹牛祠锣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咽安,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伴网,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了妆棒?” 一聲冷哼從身側(cè)響起澡腾,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糕珊,沒(méi)想到半個(gè)月后动分,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡红选,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年澜公,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纠脾。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玛瘸,死狀恐怖蜕青,靈堂內(nèi)的尸體忽然破棺而出苟蹈,到底是詐尸還是另有隱情糊渊,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布慧脱,位于F島的核電站渺绒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏菱鸥。R本人自食惡果不足惜宗兼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氮采。 院中可真熱鬧殷绍,春花似錦、人聲如沸鹊漠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)躯概。三九已至登钥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娶靡,已是汗流浹背牧牢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姿锭,地道東北人塔鳍。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像呻此,于是被迫代替她去往敵國(guó)和親献幔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • String 類可以認(rèn)為是 Java 語(yǔ)言中最為常用的類了,對(duì)于 String 的理解更是 Java 面試題的呈牙幔客...
    Kerwong閱讀 1,533評(píng)論 0 3
  • 前言 RTFSC (Read the fucking source code )才是生活中最重要的郑兴。我們天天就是要...
    二毛_coder閱讀 451評(píng)論 1 1
  • String 是Java編程中的引用類型,不屬于基本類型贝乎,默認(rèn)值為null情连,在Java中是用來(lái)創(chuàng)建于操作字符串。源...
    小杰的快樂(lè)時(shí)光閱讀 539評(píng)論 0 1
  • 在做java開(kāi)發(fā)中览效,我們一定沒(méi)少使用String這個(gè)東西却舀,對(duì)它可謂是非常熟悉了虫几,但是我今天要來(lái)仔細(xì)的學(xué)習(xí)學(xué)習(xí)Str...
    草帽小子J閱讀 349評(píng)論 0 0
  • String String是JAVA中最常用的對(duì)象,就是這樣一個(gè)最常用最普通的對(duì)象挽拔,當(dāng)你深入研究時(shí)卻發(fā)現(xiàn)我們并不是...
    luoyoub閱讀 399評(píng)論 1 0