嚴格來說,String確實有長度限制。
1、String內部使用一個char[]陣列來存放字串的內容,陣列下標是整數(也可以參考String的建構方法String(char value[], int offset, int count) ,可以知道字元數量是用整數表示),整數(Java規定32位元)表示範圍是2G,也就是說,Java陣列最大的長度是2G,即字串不能超過2G個字元。
2、Java的陣列大小還有沒有其他的限制?事實上陣列大小不能超過Java堆的大小,而Java堆的最大尺寸可以透過啟動參數指定,如果Java堆開得夠大,陣列的最大長度是可以不斷增加的。
所以,根據理論,字串的字元數不能超過2G個,但少於2G個字元是有可能的。
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,超過這個限制就會導致編譯錯誤。
以上是Java中String類型的長度是否有限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!