日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试官:String的最大长度是多少?

發布時間:2024/4/11 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试官:String的最大长度是多少? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前有提到,指北君在做面試相關的事情。有面試官問了String的最大長度是多少?指北君聽到這個問題之后有點懵,還好指北君抗住了。

指北君:面試官你好,可以開始面試了嗎?

面試官:你好,那我們現在開始吧。之前我們聊了new object()到底占用多少個字節?看你對JVM有一定的了解。那我今天問問你,一個 String 字符串最大長度是多少?

指北君:從我們平常使用的角度看,String 字符串似乎是沒有長度限制。所以也不存在最大長度這個事情。

面試官:真的這樣嗎?是這樣的話,我們今天可以結束了。不用再聊了。

指北君:那等等,我想一下。

指北君大腦中瘋狂搜索 String 源代碼的相關內容。

指北君終于在String 源碼中找到了蛛絲馬跡,

public String(char value[], int offset, int count) {if (offset < 0) {throw new StringIndexOutOfBoundsException(offset);}if (count <= 0) {if (count < 0) {throw new StringIndexOutOfBoundsException(count);}if (offset <= value.length) {this.value = "".value;return;}}// Note: offset or count might be near -1>>>1.if (offset > value.length - count) {throw new StringIndexOutOfBoundsException(offset + count);}this.value = Arrays.copyOfRange(value, offset, offset+count);}

指北君:我記得String 源碼中有個構造函數,有個count的參數是int類型的。在Java 中,int的最大長度是2^31-1。也就是說 String 的長度最大是2^31-1。

面試官:嗯,沒錯,這個是理論上的長度吧,實際情況能達到嗎?

指北君又陷入了沉思…… 開始計算起存這么大的String需要消耗多大的內存。

指北君:我剛才在腦子里算了下,存儲長度2^31-1的字符串需要4GB的內存,也就是說,我們需要有大于4GB的JVM運行內存才行。

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

面試官:既然你已經提到了JVM,那String一般都存儲在JVM的哪塊區域。

指北君:字符串在JVM中的存儲分兩種情況,我上面說的String ,它是存儲在JVM的堆棧中。另外還有字符串常量存儲在常量池里面。

面試官:那你覺得常量池中的字符串最大長度是2^31-1嗎?

指北君:Java中字符串在常量池中通過CONSTANT_Utf8類型表示。

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

指北君:我們只要重點關注bytes[length]即可,length在這里就是代表字符串的長度,length的類型是u2,u2是無符號的16位整數,也就是說最大長度可以做到2^16-1 即 65535。

面試官:按照你說的,我在我的機器上試了一下65535長度的字符串,編譯報錯了。這是怎么回事呢?

指北君:這是因為javac編譯器做了限制,需要length < 65535。所以字符串常量在常量池中的最大長度是65534。你減少1個字符試試看。

面試官:這次編譯沒問題了。我們今天就先到這里吧。

指北君:好的,我的offer,有戲嗎?

面試官:繼續努力鴨

總結

今天我們模擬面試了String的最大長度問題。結論是String是有長度限制的,但是不同的狀態下,具有不同的長度限制。

  • 字符串常量長度不能超過65534
  • 堆內字符串的長度不超過2^31-1

總結

以上是生活随笔為你收集整理的面试官:String的最大长度是多少?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。