欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java?String到底有多長?String超出長度該如何解決

 更新時(shí)間:2023年01月30日 11:08:21   作者:hzycy  
在Java中,由于字符串常量池的存在,String常量長度限制取決于String常量在常量池中的存儲(chǔ)大小,下面這篇文章主要給大家介紹了關(guān)于java?String到底有多長?String超出長度該如何解決的相關(guān)資料,需要的朋友可以參考下

Java String 可以有多長?

1. 字符串有多長是指字符數(shù)還是字節(jié)數(shù)?

2.字符串有幾種存在形式?

3.字符串存在的形式有那些限制?

由一個(gè)問題,我們可以延伸出這么多問題?

2種存在形式

樣板代碼:

// 棧
String longStr = "aaaaa.....aaaaa"; 

這種樣板代碼的形式是存在棧中。

從文件中讀取字符串:

// 堆
byte[] strByte = loadFromFile(new File("String.txt"));
 
String longStr = new String(strByte);

這種通過從文件中讀取字符串的形式是存在堆中。

棧中的String

// 棧
String longStr = "aaaaa.....aaaaa"; 
CONSTANT_Utf8_info{
 
  u1 tag;
  u2 length; //  16位證書 2^16-1 = 65535  0~65535
  u1 bytes[length]; // 65535
 
}

Java String 的字節(jié)長度為65535,由此得出棧中String的最大長度可以裝65535個(gè)字節(jié)?

當(dāng)我們寫65535個(gè)a的時(shí)候運(yùn)行它居然報(bào)錯(cuò):error: constant string too long

不思其解???

我們找到j(luò)avac編譯源碼:view src/share/classes/com/sun/tools/javac/jvm/Gen.java

找到方法:checkStringConstant()

我們看下Pool.MAX_STRING_LENGTH 是多少

路徑:/langtools/src/share/classes/com/sun/tools/javac/jvm/Pool.java

由此得出必須得小于65535,所以String 能裝65534個(gè)拉丁字符。

引發(fā)思考既然能裝65534個(gè)拉丁字符,那能裝多少個(gè)中文字符呢?

有人這時(shí)馬上就說能裝 65534/3個(gè),結(jié)果出乎意料中文能裝65535/3個(gè)。

我們?cè)僖黄鹛剿髦形淖址?,我們?cè)俅畏鰆avac源碼進(jìn)行探索

路徑:/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java

writePool 方法

可以看到這里寫的是 bs.length > Pool.MAX_STRING_LENGTH 就會(huì)拋出異常,那么證明中文字符是可以裝65535/3個(gè)。

由此我們得出結(jié)論:在棧中的字符串可以裝拉丁字節(jié)65534個(gè),非拉丁字節(jié)可以裝65535個(gè),可以裝中文字符65535/3個(gè)。

堆中的String

// 堆
byte[] strByte = loadFromFile(new File("String.txt"));
 
String longStr = new String(strByte);

String內(nèi)部是以char數(shù)組的形式存儲(chǔ),數(shù)組的長度是int類型,那么String允許的最大長度就是Integer.MAX_VALUE,不過也受實(shí)際的內(nèi)存影響。

String超出長度怎么解決?

由此得出如果我們的字符長過長,我們可以通過寫文件 讀文件的方式去解決。

javac編譯源碼github參考地址:https://github.com/infobip/infobip-open-jdk-8

補(bǔ)充:Java string 長度不足補(bǔ)0的方法

方法如下:

String s=String.format("%02d", 1)
//1為int類型,0代表前面要補(bǔ)的字符 2代表字符串長度,d表示參數(shù)為整數(shù)類型

總結(jié)

到此這篇關(guān)于java String到底有多長?String超出長度該如何解決的文章就介紹到這了,更多相關(guān)java String有多長內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java編程接口詳細(xì)

    Java編程接口詳細(xì)

    這篇文章主要小編主要給大家講解的是Java編程中的接口,文章會(huì)從抽象類和抽象方法開始展開內(nèi)容,感興趣的小伙伴可以參考下面文章的具體內(nèi)容
    2021-10-10
  • 基于Java ActiveMQ的實(shí)例講解

    基于Java ActiveMQ的實(shí)例講解

    下面小編就為大家?guī)硪黄贘ava ActiveMQ的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • SpringBoot如何優(yōu)雅的處理校驗(yàn)參數(shù)的方法

    SpringBoot如何優(yōu)雅的處理校驗(yàn)參數(shù)的方法

    這篇文章主要介紹了SpringBoot如何優(yōu)雅的處理校驗(yàn)參數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 劍指Offer之Java算法習(xí)題精講字符串操作與數(shù)組及二叉搜索樹

    劍指Offer之Java算法習(xí)題精講字符串操作與數(shù)組及二叉搜索樹

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • Java JVM字節(jié)碼指令集總結(jié)整理與介紹

    Java JVM字節(jié)碼指令集總結(jié)整理與介紹

    本節(jié)將會(huì)著重介紹一下JVM中的指令集、Java是如何跨平臺(tái)的、JVM指令集參考手冊(cè)等內(nèi)容。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Mybatis-Plus批量添加或修改數(shù)據(jù)的3種方式總結(jié)

    Mybatis-Plus批量添加或修改數(shù)據(jù)的3種方式總結(jié)

    使用Mybatis-plus可以很方便的實(shí)現(xiàn)批量新增和批量修改,不僅比自己寫foreach遍歷方便很多,而且性能也更加優(yōu)秀,下面這篇文章主要給大家介紹了關(guān)于Mybatis-Plus批量添加或修改數(shù)據(jù)的3種方式,需要的朋友可以參考下
    2023-05-05
  • Java數(shù)據(jù)類型轉(zhuǎn)換詳解

    Java數(shù)據(jù)類型轉(zhuǎn)換詳解

    這篇文章主要講解Java中基本數(shù)據(jù)類型、字符串與其它數(shù)據(jù)類型以及常見的日期類型的轉(zhuǎn)換,希望能給大家做一個(gè)參考。
    2016-06-06
  • 如何獲取springboot打成jar后的classpath

    如何獲取springboot打成jar后的classpath

    這篇文章主要介紹了如何獲取springboot打成jar后的classpath問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java中的static--靜態(tài)變量你了解嗎

    Java中的static--靜態(tài)變量你了解嗎

    Java 中被 static 修飾的成員稱為靜態(tài)成員或類成員。它屬于整個(gè)類所有,而不是某個(gè)對(duì)象所有,即被類的所有對(duì)象所共享。靜態(tài)成員可以使用類名直接訪問,也可以使用對(duì)象名進(jìn)行訪問,.下面我們來詳細(xì)了解一下吧
    2021-09-09
  • 探討如何在Eclipse中過濾版本控制文件.svn

    探討如何在Eclipse中過濾版本控制文件.svn

    本篇文章是對(duì)在Eclipse中過濾版本控制文件.svn的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07

最新評(píng)論