日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java的String編譯期和運(yùn)行期的長(zhǎng)度限制

汽車(chē)玩家 ? 來(lái)源:未知 ? 作者:李威 ? 2020-05-03 18:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這個(gè)問(wèn)題要分兩個(gè)階段看,分別是編譯期和運(yùn)行期。不同的時(shí)期限制不一樣。

01 編譯期

首先,我們先來(lái)合理的推斷一下,當(dāng)我們?cè)诖a中使用String s = "";的形式來(lái)定義String對(duì)象的時(shí)候,""中字符的個(gè)數(shù)有沒(méi)有限制呢?

既然是合理的推斷,那就要要足夠的依據(jù),所以我們可以從String的源碼入手,根據(jù)public String(char value[], int offset, int count)的定義,count是int類(lèi)型的,所以,char value[]中最多可以保存Integer.MAX_VALUE個(gè),即2147483647字符。(jdk1.8.0_73)

但是,實(shí)驗(yàn)證明,String s = "";中,最多可以有65534個(gè)字符。如果超過(guò)這個(gè)個(gè)數(shù)。就會(huì)在編譯期報(bào)錯(cuò)。

public static void main(String[] args) {

          String s = "a...a";// 共65534個(gè)a
          System.out.println(s.length());
          String s1 = "a...a";// 共65535個(gè)a
          System.out.println(s1.length());
}

以上代碼,會(huì)在String s1 = "a...a";// 共65535個(gè)a處編譯失?。?/p>

? javac StringLenghDemo.java
StringLenghDemo.java:11: 錯(cuò)誤: 常量字符串過(guò)長(zhǎng)

明明說(shuō)好的長(zhǎng)度限制是2147483647,為什么65535個(gè)字符就無(wú)法編譯了呢?

當(dāng)我們使用字符串字面量直接定義String的時(shí)候,是會(huì)把字符串在常量池中存儲(chǔ)一份的。那么上面提到的65534其實(shí)是常量池的限制。

常量池中的每一種數(shù)據(jù)項(xiàng)也有自己的類(lèi)型。Java中的UTF-8編碼的Unicode字符串在常量池中以CONSTANT_Utf8類(lèi)型表示。

CONSTANTUtf8info是一個(gè)CONSTANTUtf8類(lèi)型的常量池?cái)?shù)據(jù)項(xiàng),它存儲(chǔ)的是一個(gè)常量字符串。常量池中的所有字面量幾乎都是通過(guò)CONSTANTUtf8info描述的。CONSTANTUtf8_info的定義如下:

CONSTANT_Utf8_info {

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

由于本文的重點(diǎn)并不是CONSTANTUtf8info的介紹,這里就不詳細(xì)展開(kāi)了,我們只需要我們使用字面量定義的字符串在class文件中,是使用CONSTANTUtf8info存儲(chǔ)的,而CONSTANTUtf8info中有u2 length;表明了該類(lèi)型存儲(chǔ)數(shù)據(jù)的長(zhǎng)度。

u2是無(wú)符號(hào)的16位整數(shù),因此理論上允許的的最大長(zhǎng)度是2^16=65536。而 java class 文件是使用一種變體UTF-8格式來(lái)存放字符的,null 值使用兩個(gè) 字節(jié)來(lái)表示,因此只剩下 65536- 2 = 65534個(gè)字節(jié)。

關(guān)于這一點(diǎn),在the class file format spec中也有明確說(shuō)明:

The length of field and method names, field and method descriptors, and other constant string values is limited to 65535 characters by the 16-bit unsigned length item of the CONSTANTUtf8info structure (§4.4.7). Note that the limit is on the number of bytes in the encoding and not on the number of encoded characters. UTF-8 encodes some characters using two or three bytes. Thus, strings incorporating multibyte characters are further constrained.

也就是說(shuō),在Java中,所有需要保存在常量池中的數(shù)據(jù),長(zhǎng)度最大不能超過(guò)65535,這當(dāng)然也包括字符串的定義咯。

02 運(yùn)行期

上面提到的這種String長(zhǎng)度的限制是編譯期的限制,也就是使用String s= "";這種字面值方式定義的時(shí)候才會(huì)有的限制。

那么。String在運(yùn)行期有沒(méi)有限制呢,答案是有的,就是我們前文提到的那個(gè)Integer.MAX_VALUE ,這個(gè)值約等于4G,在運(yùn)行期,如果String的長(zhǎng)度超過(guò)這個(gè)范圍,就可能會(huì)拋出異常。(在jdk 1.9之前)

int 是一個(gè) 32 位變量類(lèi)型,取正數(shù)部分來(lái)算的話,他們最長(zhǎng)可以有

2^31-1 =2147483647 個(gè) 16-bit Unicodecharacter
2147483647 * 16 = 34359738352 位
34359738352 / 8 = 4294967294 (Byte)
4294967294 / 1024 = 4194303.998046875 (KB)
4194303.998046875 / 1024 = 4095.9999980926513671875 (MB)
4095.9999980926513671875 / 1024 = 3.99999999813735485076904296875 (GB)
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3012

    瀏覽量

    116894
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    596

    瀏覽量

    23225
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    黑馬-Java+AI新版V16零基礎(chǔ)就業(yè)班百度云網(wǎng)盤(pán)下載+Java+AI全棧開(kāi)發(fā)工程師

    使用 Jackson、Gson 反序列化為 POJO,借助編譯類(lèi)型校驗(yàn)規(guī)避運(yùn)行時(shí)解析異常。對(duì)于復(fù)雜業(yè)務(wù)邏輯,可以設(shè)計(jì)兩階段調(diào)用:第一階段讓模型對(duì)用戶(hù)意圖分類(lèi),第二階段根據(jù)分類(lèi)結(jié)果路由到專(zhuān)門(mén)的提示模板
    發(fā)表于 05-01 11:29

    瑞芯微(EASY EAI)RV1126B 開(kāi)發(fā)(編譯)方式說(shuō)明

    1.交叉編譯(推薦)1.1優(yōu)缺點(diǎn)優(yōu)點(diǎn):采用x86架構(gòu)的CPU進(jìn)行編譯,編譯速度快。源碼編輯方便,開(kāi)發(fā)環(huán)境支持各種如vsCode、qtCreator等IDE。缺點(diǎn):編譯環(huán)境需要進(jìn)行安裝部
    的頭像 發(fā)表于 03-28 16:08 ?5265次閱讀
    瑞芯微(EASY EAI)RV1126B 開(kāi)發(fā)(<b class='flag-5'>編譯</b>)方式說(shuō)明

    SGM2527可編程電流限制開(kāi)關(guān):特性與應(yīng)用解析

    Corp推出的一款緊湊型電子保險(xiǎn)絲(eFuse),具備一套完整的保護(hù)功能。 文件下載: SGM2527.pdf 產(chǎn)品概述 SGM2527專(zhuān)為多種流行的直流總線設(shè)計(jì),具有寬工作電壓范圍。其集成的保護(hù)N溝道MOSFET具有極低的 (R {DS(ON)}) ,有助于降低正常運(yùn)行期間的功率損耗??删幊誊泦?dòng)時(shí)間可在電源
    的頭像 發(fā)表于 03-24 11:20 ?177次閱讀

    以太網(wǎng)跳線長(zhǎng)度和彎曲程度:如何影響網(wǎng)絡(luò)性能

    銅纜以太網(wǎng)線在現(xiàn)代企業(yè)網(wǎng)絡(luò)、數(shù)據(jù)中心和智能制造中仍然發(fā)揮著不可替代的作用。以太網(wǎng)銅纜的長(zhǎng)度和曲率決定了鏈路性能、誤碼率、傳輸穩(wěn)定性以及網(wǎng)絡(luò)帶寬。隨著線纜長(zhǎng)度的增加,其插入損耗也會(huì)增加。過(guò)大的曲率會(huì)
    的頭像 發(fā)表于 03-24 10:41 ?178次閱讀

    簡(jiǎn)單高效的鴻蒙編譯提速技巧

    在鴻蒙應(yīng)用開(kāi)發(fā)中編譯構(gòu)建是開(kāi)發(fā)者最頻繁的操作,每一次編譯提速都能顯著提升項(xiàng)目整體開(kāi)發(fā)效率。本次分享幾個(gè)簡(jiǎn)單卻高效的鴻蒙編譯提速技巧,從編譯配置、構(gòu)建方式等維度進(jìn)行優(yōu)化,讓你的開(kāi)發(fā)流程更
    的頭像 發(fā)表于 03-04 16:09 ?278次閱讀
    簡(jiǎn)單高效的鴻蒙<b class='flag-5'>編譯</b>提速技巧

    開(kāi)源鴻蒙技術(shù)大會(huì)2025丨編譯器與編程語(yǔ)言分論壇:語(yǔ)言驅(qū)動(dòng)系統(tǒng)創(chuàng)新,編譯賦能生態(tài)繁榮

    在萬(wàn)物智聯(lián)的時(shí)代背景下,操作系統(tǒng)底層能力的構(gòu)建離不開(kāi)編程語(yǔ)言與編譯器的關(guān)鍵支撐。作為開(kāi)源鴻蒙生態(tài)的核心技術(shù),語(yǔ)言設(shè)計(jì)與編譯器、虛擬機(jī)實(shí)現(xiàn)的進(jìn)步直接關(guān)系到開(kāi)發(fā)效率、運(yùn)行性能與系統(tǒng)安全。本次分論壇聚焦
    的頭像 發(fā)表于 11-20 17:24 ?1196次閱讀
    開(kāi)源鴻蒙技術(shù)大會(huì)2025丨<b class='flag-5'>編譯</b>器與編程語(yǔ)言分論壇:語(yǔ)言驅(qū)動(dòng)系統(tǒng)創(chuàng)新,<b class='flag-5'>編譯</b>賦能生態(tài)繁榮

    Arm Neoverse CPU上大代碼量Java應(yīng)用的性能測(cè)試

    Java 是互聯(lián)網(wǎng)領(lǐng)域廣泛使用的編程語(yǔ)言。Java 應(yīng)用的一些特性使其性能表現(xiàn)與提前編譯的原生應(yīng)用(例如 C 程序)大相徑庭。由于 Java 字節(jié)碼無(wú)法直接在 CPU 上執(zhí)行,因此通常
    的頭像 發(fā)表于 11-05 11:25 ?967次閱讀
    Arm Neoverse CPU上大代碼量<b class='flag-5'>Java</b>應(yīng)用的性能測(cè)試

    關(guān)于伺服電纜長(zhǎng)度問(wèn)題的詳解

    伺服電纜作為工業(yè)自動(dòng)化系統(tǒng)中的關(guān)鍵組件,其長(zhǎng)度問(wèn)題直接影響設(shè)備性能與系統(tǒng)穩(wěn)定性。本文將圍繞伺服電纜長(zhǎng)度對(duì)信號(hào)傳輸、電磁干擾、電壓降及安裝維護(hù)的影響展開(kāi)深度解析,并提供專(zhuān)業(yè)解決方案。 一、電纜長(zhǎng)度
    的頭像 發(fā)表于 11-01 07:40 ?1429次閱讀

    riscv virt64編譯后 ls無(wú)法運(yùn)行怎么解決?

    用倉(cāng)庫(kù)里的默認(rèn)配置編譯qemu-virt64-riscv 生成后運(yùn)行,顯示 [E/DBG] virtio-blk0 mount failed ls看不到文件夾 msh />ls No such directory
    發(fā)表于 09-22 06:38

    Java效率提升指南:5個(gè)Java工具選型建議及Perforce JRebel和XRebel介紹

    企業(yè)級(jí)Java環(huán)境越來(lái)越復(fù)雜,真正的破局點(diǎn),可能不在“人”,而在于“工具”。5個(gè)實(shí)用建議,幫你理清Java工具的選型思路。
    的頭像 發(fā)表于 09-11 13:59 ?2001次閱讀
    <b class='flag-5'>Java</b>效率提升指南:5個(gè)<b class='flag-5'>Java</b>工具選型建議及Perforce JRebel和XRebel介紹

    cJSON_Parse返回為空,有長(zhǎng)度限制是什么原因?

    cJSON_ParseWithLengthOpts(value, buffer_length, return_parse_end, require_null_terminated); } 我用的是CJSON軟件包 為什么這里解析的json長(zhǎng)度限制,怎么去擴(kuò)大它的
    發(fā)表于 09-11 06:28

    如何使TC1796運(yùn)行在RAM?

    生成工具:DAvE2 目前我用同一份代碼,在HighTec選擇iROM的情況下,去進(jìn)行編譯調(diào)試,可以正常的運(yùn)行; 但在選擇iRAM的情況下,去編譯調(diào)試,調(diào)試日志顯示無(wú)法讀取DBGSR,這應(yīng)該是出現(xiàn)了程序跑飛了; 從調(diào)試界面看,
    發(fā)表于 08-13 07:26

    STM32 CubeIDE編譯、運(yùn)行(燒錄程序)的快捷鍵是什么?

    CubeIDE編譯、運(yùn)行(燒錄程序)的快捷鍵是什么?
    發(fā)表于 07-25 07:04

    六類(lèi)線永久鏈路的長(zhǎng)度不能超過(guò)多少米-科蘭

    ) 指綜合布線系統(tǒng)中固定安裝的部分,包括水平電纜、連接模塊(如信息插座、配線架)及中間連接點(diǎn)(CP點(diǎn)),不包括兩端跳線、測(cè)試設(shè)備插接件。其長(zhǎng)度限制旨在確保信號(hào)傳輸質(zhì)量,避免因鏈路過(guò)長(zhǎng)導(dǎo)致衰減、串?dāng)_等問(wèn)題。 信道(Channel) 包含永久鏈路及兩端跳線(如設(shè)備跳線、工作區(qū)
    的頭像 發(fā)表于 07-14 10:09 ?1933次閱讀
    六類(lèi)線永久鏈路的<b class='flag-5'>長(zhǎng)度</b>不能超過(guò)多少米-科蘭

    ArkUI-X平臺(tái)橋接Bridge說(shuō)明

    \\\\ java.util.HashMap NSDictionary 說(shuō)明 1、S表示string、number、boolean類(lèi)型; 2、Record表示<key, value>類(lèi)型,key僅為string類(lèi)型
    發(fā)表于 06-19 23:12
    宁强县| 扶余县| 宁乡县| 夏津县| 溧水县| 丘北县| 白沙| 永宁县| 海阳市| 萨迦县| 彩票| 冀州市| 黄浦区| 略阳县| 铅山县| 临夏县| 牟定县| 武宁县| 宽城| 登封市| 浦江县| 盖州市| 安宁市| 京山县| 佛坪县| 南开区| 华安县| 谢通门县| 三亚市| 上杭县| 金堂县| 砚山县| 枣强县| 陈巴尔虎旗| 临沂市| 大连市| 上饶县| 大宁县| 西乡县| 石泉县| 嘉定区|