最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中String能存儲多少個字符

 更新時間:2026年02月07日 09:30:01   作者:念念清晰  
本文主要介紹了Java中字符串長度的限制,Java中字符串長度的限制,

首先String的length方法返回是int。所以理論上長度一定不會超過int的最大值。

編譯器源碼如下,限制了字符串長度大于等于65535就會編譯不通過

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;
    }
}

Java中的字符常量都是使用UTF8編碼的,UTF8編碼使用1~4個字節(jié)來表示具體的Unicode字符。所以有的字符占用一個字節(jié),而我們平時所用的大部分中文都需要3個字節(jié)來存儲。

//65534個字母,編譯通過
String s1 = "dd..d";

//21845個中文”自“,編譯通過
String s2 = "自自...自";

//一個英文字母d加上21845個中文”自“,編譯失敗
String s3 = "d自自...自";

對于s1,一個字母d的UTF8編碼占用一個字節(jié),65534字母占用65534個字節(jié),長度是65534,長度和存儲都沒超過限制,所以可以編譯通過。

對于s2,一個中文占用3個字節(jié),21845個正好占用65535個字節(jié),而且字符串長度是21845,長度和存儲也都沒超過限制,所以可以編譯通過。

對于s3,一個英文字母d加上21845個中文”自“占用65536個字節(jié),超過了存儲最大限制,編譯失敗。

JVM規(guī)范對常量池有所限制。量池中的每一種數(shù)據(jù)項都有自己的類型。Java中的UTF-8編碼的Unicode字符串在常量池中以CONSTANTUtf8類型表示。CONSTANTUtf8的數(shù)據(jù)結(jié)構(gòu)如下:

CONSTANT_Utf8_info {
    u1 tag;
    u2 length;
    u1 bytes[length];
}

我們重點關(guān)注下長度為 length 的那個bytes數(shù)組,這個數(shù)組就是真正存儲常量數(shù)據(jù)的地方,而 length 就是數(shù)組可以存儲的最大字節(jié)數(shù)。length 的類型是u2,u2是無符號的16位整數(shù),因此理論上允許的的最大長度是2^16-1=65535。所以上面byte數(shù)組的最大長度可以是65535

運行時限制

String 運行時的限制主要體現(xiàn)在 String 的構(gòu)造函數(shù)上。下面是 String 的一個構(gòu)造函數(shù):

public String(char value[], int offset, int count) {
    ...
}

上面的count值就是字符串的最大長度。在Java中,int的最大長度是2^31-1。所以在運行時,String 的最大長度是2^31-1。

但是這個也是理論上的長度,實際的長度還要看你JVM的內(nèi)存。我們來看下,最大的字符串會占用多大的內(nèi)存。

(2^31-1)*16/8/1024/1024/1024 = 2GB

所以在最壞的情況下,一個最大的字符串要占用 2GB的內(nèi)存。如果你的虛擬機不能分配這么多內(nèi)存的話,會直接報錯的。

補充 JDK9以后對String的存儲進行了優(yōu)化。底層不再使用char數(shù)組存儲字符串,而是使用byte數(shù)組。對于LATIN1字符的字符串可以節(jié)省一倍的內(nèi)存空間。

到此這篇關(guān)于Java中String能存儲多少個字符的文章就介紹到這了,更多相關(guān)Java String 存儲字符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot集成Apache Kafka的實戰(zhàn)指南

    Spring Boot集成Apache Kafka的實戰(zhàn)指南

    Apache Kafka 是一個分布式流處理平臺,廣泛用于構(gòu)建實時數(shù)據(jù)管道、日志聚合系統(tǒng)和事件溯源架構(gòu),下面我們來看看如何在 Spring Boot 項目中集成 Kafka吧
    2025-06-06
  • mybatis-plus通用枚舉@JsonValue接收參數(shù)報錯No enum constant

    mybatis-plus通用枚舉@JsonValue接收參數(shù)報錯No enum constant

    最近在使用mybatis-plus時用到了通用枚舉,遇到了問題,本文主要介紹了mybatis-plus通用枚舉@JsonValue接收參數(shù)報錯No enum constant,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • java五子棋小游戲?qū)崿F(xiàn)代碼

    java五子棋小游戲?qū)崿F(xiàn)代碼

    這篇文章主要為大家詳細介紹了java五子棋實現(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot中MyBatis-Flex的集成和使用實現(xiàn)

    SpringBoot中MyBatis-Flex的集成和使用實現(xiàn)

    MyBatis-Flex是一個基于MyBatis的數(shù)據(jù)訪問框架,MyBatis-Flex能夠極大地提高我們的開發(fā)效率和開發(fā)體驗,本文主要介紹了SpringBoot中MyBatis-Flex的集成和使用實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • SpringBoot實現(xiàn)熱部署的方式總結(jié)

    SpringBoot實現(xiàn)熱部署的方式總結(jié)

    所謂熱部署,就是在應(yīng)用正在運行的時候升級軟件,卻不需要重新啟動應(yīng)用,對于Java來說,熱部署就是在運行時更新Java類文件,本文將深入探討SpringBoot有哪些方式可以實現(xiàn)熱部署,感興趣的朋友可以小編一探討學習
    2023-06-06
  • 解讀為何java中的boolean類型是32位的

    解讀為何java中的boolean類型是32位的

    這篇文章主要介紹了為何java中的boolean類型是32位的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SpringBoot基于Java Agent實現(xiàn)項目監(jiān)控

    SpringBoot基于Java Agent實現(xiàn)項目監(jiān)控

    在生產(chǎn)環(huán)境中,監(jiān)控對于項目問題的分析排查變得尤為重要,本文將介紹如何利用Java Agent技術(shù)實現(xiàn)對SpringBoot應(yīng)用的無侵入式監(jiān)控,有需要的小伙伴可以了解下
    2025-07-07
  • ssm?mybatis如何配置多個mapper目錄

    ssm?mybatis如何配置多個mapper目錄

    這篇文章主要介紹了ssm?mybatis如何配置多個mapper目錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • Spring如何使用三級緩存解決循環(huán)依賴

    Spring如何使用三級緩存解決循環(huán)依賴

    在Spring框架中,循環(huán)依賴是指兩個或多個Bean相互依賴,形成閉環(huán),導致無法完成初始化,此問題僅存在于單例Bean中,而原型Bean會拋出異常,Spring通過三級緩存及提前暴露策略解決循環(huán)依賴:一級緩存存放完全初始化的Bean
    2024-11-11
  • Spring Cloud實戰(zhàn)技巧之使用隨機端口

    Spring Cloud實戰(zhàn)技巧之使用隨機端口

    這篇文章主要給大家介紹了關(guān)于Spring Cloud實戰(zhàn)技巧之使用隨機端口的相關(guān)資料,文中介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。
    2017-06-06

最新評論

高安市| 湾仔区| 甘德县| 曲沃县| 安陆市| 宁城县| 南安市| 榕江县| 台湾省| 柘荣县| 麦盖提县| 克拉玛依市| 福泉市| 云和县| 荆门市| 兴国县| 额敏县| 闵行区| 晋州市| 宁晋县| 民权县| 大宁县| 吉木乃县| 绿春县| 台江县| 通城县| 南阳市| 金阳县| 小金县| 寿阳县| 肥乡县| 黔西县| 卓资县| 洪湖市| 武宁县| 安宁市| 诸暨市| 苍南县| 本溪市| 呼伦贝尔市| 长海县|