最近回顧了一下String的長度,記錄一下, 萬一下次忘了方便再次記憶!
Java中的String的長度要要分兩個階段去思考:
1、編譯期:
在JDK1.8中,看過String的源碼的應該知道,根據public String(char value[], int offset, int count)的定義,count是int類型的,所以,char value[]中最多可以保存Integer.MAX_VALUE個,即2147483647字符。
但是實際上卻不一樣,String s = “”;中,最多可以有65534個字符。如果超過這個個數。就會在編譯期報錯。
public static void main(String[] args) {
String s = "1....";// 共65534個1
System.out.println(s.length());
String s1 = "1...";// 共65535個1
System.out.println(s1.length());
}
當String在編譯期的長度超過了65534就會報異常:
javac StringLenghDemo.java
StringLenghDemo.java:11: 錯誤: 常量字符串過長
這個是爲什麼了?
當我們使用字符串字面量直接定義String的時候,是會把字符串在常量池中存儲一份的。那麼上面提到的65534其實是常量池的限制。
在JVM中的常量池中的每一種數據項也有自己的類型。Java中的UTF-8編碼的Unicode字符串在常量池中以CONSTANT_Utf8類型表示。
CONSTANTUtf8info是一個CONSTANTUtf8類型的常量池數據項,它存儲的是一個常量字符串。常量池中的所有字面量幾乎都是通過CONSTANTUtf8