String字符串的長度

最近回顧了一下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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章