前些天看到一道面試題,題目很容易理解:String的長度限制是多少?
針對這個題目,瀏覽了網友的回答,大概得到了3個層次的答案。
最淺的層次:
近似計算機內存大小的長度。這是作為一個程序員最淺顯的回答。
一般的層次(大多數人的回答):
通過閱讀String類的源碼,知道有這樣的成員變量,
/** The count is the number of characters in the String. */ private final int count;
count用來記錄字符串的長度,是int型,則String的最大長度為Integer.MAX_VALUE,即2的31次方。這是否是真正的答案呢?
最深層的答案:
65535。
看到這個題目,立刻聯想到之前的一本書,《深入理解java虛擬機》,剛好只看了一章,Class文件結構。得知在編譯為字節碼文件后,String類型的變量的值在常量池中使用CONSTANT_utf8-info類型表示,而CONSTANT_utf8-info型常量的結構為u1u2u1,得知長度限制使用兩個字節的無符號二進制位表示,從而得出,String的最大長度為2的16次方,即65535。
以上。
---- 作者批注:65535只是在編譯階段的限制,運行中時,String對象的內部字符數組可以通過其它手段拼接成大於65535長度的字符串。所以運行時的字符串長度最多還應該是Integer.MAX_VALUE。