1. 程式人生 > 實用技巧 >String字串的最大長度

String字串的最大長度

在學習和開發過程中,我們經常會討論 short ,int 和 long 這些基本資料型別的取值範圍,但是對於 String 型別我們好像很少注意它的“取值範圍”。那麼對於 String 型別,它到底有沒有長度限制呢?

其實 String 型別的物件,他們是有長度限制的, String 物件並不能“儲存”無限長度的字串。關於 String 的長度限制要從編譯時限制和執行時限制兩方面考慮。

有JVM虛擬機器相關知識的同學肯定知道,下面定義的字串常量“自由之路”會被放入方法區的常量池中。

Copy
String s = "自由之路";
System.out.println(s);

Stirng 長度之所以會受限制,是因JVM規範對常量池有所限制。常量池中的每一種資料項都有自己的型別。Java中的UTF-8編碼的Unicode字串在常量池中以CONSTANT_Utf8型別表示。

CONSTANT_Utf8的資料結構如下:

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

我們重點關注下長度為 length 的那個bytes陣列,這個陣列就是真正儲存常量資料的地方,而 length 就是陣列可以儲存的最大位元組數。length 的型別是u2,u2是無符號的16位整數,因此理論上允許的的最大長度是2^16-1=65535。所以上面byte陣列的最大長度可以是65535。