莊周夢(mèng)蝶

          生活、程序、未來(lái)
             :: 首頁(yè) ::  ::  :: 聚合  :: 管理

          Java字符串的最大長(zhǎng)度

          Posted on 2009-01-15 01:37 dennis 閱讀(62524) 評(píng)論(7)  編輯  收藏 所屬分類(lèi): java源碼解讀
              在cpp中為了可移植性,string的長(zhǎng)度是string::size_type,突然就想知道java允許的最大字符串長(zhǎng)度為多少。看String的源碼:
          public final class String
            
          110       implements java.io.Serializable, Comparable<String>, CharSequence
            
          111   {
            
          112       /** The value is used for character storage. */
            
          113       private final char value[];
            
          114   
            
          115       /** The offset is the first index of the storage that is used. */
            
          116       private final int offset;
            
          117   
            
          118       /** The count is the number of characters in the String. */
            
          119       private final int count;
             String內(nèi)部是以char數(shù)組的形式存儲(chǔ),數(shù)組的長(zhǎng)度是int類(lèi)型,那么String允許的最大長(zhǎng)度就是Integer.MAX_VALUE了。又由于java中的字符是以16位存儲(chǔ)的,因此大概需要4GB的內(nèi)存才能存儲(chǔ)最大長(zhǎng)度的字符串。不過(guò)這僅僅是對(duì)字符串變量而言,如果是字符串字面量(string literals),如“abc"、"1a2b"之類(lèi)寫(xiě)在代碼中的字符串literals,那么允許的最大長(zhǎng)度取決于字符串在常量池中的存儲(chǔ)大小,也就是字符串在class格式文件中的存儲(chǔ)格式:
          CONSTANT_Utf8_info {
                  u1 tag;
                  u2 length;
                  u1 bytes[length];
          }

              u2是無(wú)符號(hào)的16位整數(shù),因此理論上允許的string literal的最大長(zhǎng)度是2^16-1=65535。然而實(shí)際測(cè)試表明,允許的最大長(zhǎng)度僅為65534,超過(guò)就編譯錯(cuò)誤了,有興趣可以寫(xiě)段代碼試試,估計(jì)是length還不能為0。


          評(píng)論

          # re: Java字符串的最大長(zhǎng)度  回復(fù)  更多評(píng)論   

          2009-01-15 10:06 by Arbow
          準(zhǔn)備搞cpp了吧

          # re: Java字符串的最大長(zhǎng)度  回復(fù)  更多評(píng)論   

          2009-01-31 14:57 by Jack.Wang
          LZ是否知道 Str 超過(guò) 65534 編譯錯(cuò)誤?

          # re: Java字符串的最大長(zhǎng)度  回復(fù)  更多評(píng)論   

          2009-03-19 18:53 by dennis
          @Jack.Wang
          您根本就沒(méi)看我的blog內(nèi)容就急急忙忙地評(píng)論了吧

          # re: Java字符串的最大長(zhǎng)度  回復(fù)  更多評(píng)論   

          2011-10-19 16:37 by 小彭
          很好,對(duì)我有用

          # re: Java字符串的最大長(zhǎng)度  回復(fù)  更多評(píng)論   

          2014-12-30 18:34 by yc
          NULL占用兩個(gè)位置,所以是65534

          # re: Java字符串的最大長(zhǎng)度  回復(fù)  更多評(píng)論   

          2016-04-25 15:28 by r
          utryrt

          # re: Java字符串的最大長(zhǎng)度  回復(fù)  更多評(píng)論   

          2016-06-17 15:35 by zzz
          寫(xiě)得很好
          主站蜘蛛池模板: 长沙市| 体育| 建湖县| 巴塘县| 横峰县| 任丘市| 舟曲县| 长海县| 沾化县| 固原市| 河间市| 深泽县| 呼和浩特市| 福贡县| 六枝特区| 米泉市| 鄯善县| 任丘市| 米脂县| 天柱县| 博爱县| 宁阳县| 旅游| 马尔康县| 凤冈县| 巢湖市| 陆良县| 屏南县| 高雄县| 永安市| 佛坪县| 新沂市| 百色市| 衡水市| 海安县| 中牟县| 扶沟县| 平果县| 宜城市| 德兴市| 永州市|