轉自:
http://www.java265.com/JavaJingYan/202206/16565092013833.html
下文筆者講述java中String字串最大可存盤長度的簡介說明
寫在前面的話: String型別的長度是有限制的 并不是可存盤無限長度的字串 下文筆者將依次講述String型別存盤長度簡介說明,如下所示
java編譯期的長度限制
例:
String str = "我愛java265"; System.out.println(str); //以上定義的str字串,會存盤在常量池中, //常量池中的UTF-8編碼的Unicode字串在常量池中 將使用CONSTANT_Utf8型別進行 CONSTANT_Utf8 型別結構: CONSTANT_Utf8_info { u1 tag; u2 length; u1 bytes[length]; } 陣列中存盤的即是字串實際存盤位置 length可存盤的最大位元組數,u2:是一個無符號的16位整數 所以理論上最大可存盤2^16-1=65535的位元組 注意事項: //65535個a,編譯報錯 String s = "aa..aa"; //65534個a,編譯通過 String s1 = "aa..a"; 為什么會出現這種情況呢?這是由于javac編譯器的限制,如:javac編譯器的原始碼
private void checkStringConstant(DiagnosticPosition var1, Object var2) { if (this.nerrs == 0 && var2 != null && var2 instanceof String && ((String)var2).length() >= 65535) { this.log.error(var1, "limit.string", new Object[0]); ++this.nerrs; } }
String運行時-實際可存盤大小說明
String 運行時的限制,我們可以從String建構式上 public String(char value[], int offset, int count) { ... } count:字串的最大長度 由于int型別最大長度是2^31-1 所以在運行時,String 的最大長度是2^31-1, 但只是理論上的長度,實際長度還需查看JVM記憶體 (2^31-1)*2*16/8/1024/1024/1024 = 4GB 一個最大的字串要占用4GB的記憶體,當虛擬機不能分配大于4GB的記憶體時,會直接報錯
String 的長度存在限制 編譯期: 字串的UTF8編碼值的位元組數不能超過65535,字串的長度不能超過65534 運行時: 字串的長度不能超過2^31-1 占用的記憶體數不能超過虛擬機能夠提供的最大值
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/498504.html
標籤:Java
上一篇:Java保留關鍵字簡介說明
下一篇:返回列表