先說結(jié)論:
對(duì)于Java字符串的最大長(zhǎng)度,要分為2種情況進(jìn)行討論越庇。
① 編譯期:一般情況下罩锐,最大長(zhǎng)度為65534奉狈。
② 運(yùn)行期:Integer.MAX_VALUE卤唉。
接下來通過對(duì)一個(gè)字節(jié)碼文件反編譯來解釋一下為什么?
一仁期、編譯期String字符串的最大長(zhǎng)度為什么是65534桑驱?
當(dāng)我們使用javac命令對(duì).java文件進(jìn)行編譯后,會(huì)生成相關(guān)類的.class文件跛蛋。
關(guān)于.class文件的結(jié)構(gòu)熬的,大家如果感興趣的話可以自行搜索了解一下,或者我后面如果有精力會(huì)專門寫一篇赊级,不了解.class文件的結(jié)構(gòu)并不影響接下來的理解押框。
我們只需要知道編譯后的.class文件里有一個(gè)結(jié)構(gòu)叫做常量池。
常量池 中主要存放兩大類常量:字面量(Literal)和符號(hào)引用(Symbolic References)理逊。字面量比較接近于Java語言層面的常量概念橡伞,如文本字符串、被聲明為final的常量值等晋被。而符號(hào)引用則屬于編譯原理方面的概念(這個(gè)與本文無關(guān)兑徘,故不深入講解)。