Java字符串的最大長度


 在cpp中為了可移植性,string的長度是string::size_type,突然就想知道java允許的最大字符串長度為多少。看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內部是以char數組的形式存儲,數組的長度是int類型,那么String允許的最大長度就是Integer.MAX_VALUE了。又由於java中的字符是以16位存儲的,因此大概需要4GB的內存才能存儲最大長度的字符串。不過這僅僅是對字符串變量而言,如果是字符串字面量(string literals),如“abc"、"1a2b"之類寫在代碼中的字符串literals,那么允許的最大長度取決於字符串在常量池中的存儲大小,也就是字符串在class格式文件中的存儲格式:

CONSTANT_Utf8_info {
        u1 tag;
        u2 length;
        u1 bytes[length];
}


    u2是無符號的16位整數,因此理論上允許的string literal的最大長度是2^16-1=65535。然而實際測試表明,允許的最大長度僅為65534,超過就編譯錯誤了,有興趣可以寫段代碼試試,估計是length還不能為0。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM