文章目录
- 编译期
- 运行期
- 实际开发建议
- 总结
编译期
在编写代码时,直接写在代码里的字符串(硬编码字符串)有一个长度限制。具体来说,字符串的最大长度不能超过65534个字符。如果超过这个限制,编译器会报错。 当你在代码里直接写字符串时:
String text = "我是一个很长很长的字符串...";
如果这个字符串超过了65534个字符,编译器会给出如下错误:
错误:字符串过长
这个限制的原因在于JVM规范对常量池有所限制。CONSTANT_Utf8_info
是存储常量字符串的数据项,其定义如下:
CONSTANT_Utf8_info {u1 tag; // 标记项值为CONSTANT_Utf8(1)u2 length; // 字节数组中的字节数,类型为u2u1 bytes[length]; // 字节数组包含字符串的字节数
}
其中,u2
表示两个字节的无符号数,那么1个字节有8位,2个字节就有16位,最大可表示的值为2^16 - 1 = 65535
。因此,每个字符串常量的最大长度为65535字节。 注意