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