String:java:常量字符串过长
问题:有一次定义一个超长的字符串,结果编译的时候就报错:Error:(59, 20) java: 常量字符串过长
原因:(经过查阅资料才明白)
String内部是bai以char数组的形式存储,数组的长度是int类型,那么String允许的最大长度就是Integer.MAX_VALUE = 2^zhi31 - 1 = 2147483647。又由于java中的字符是以16位存储的,因此大概需要4GB的内存才能存储最大长度的字符串。
不过这仅仅是对字符串变量而言,如果是字符串常量,如“abc”、”1234”之类写在代码中的字符串str,那么允许的最大长度取决于字符串在常量池中的存储大小,也就是字符串在class格式文件中的存储格式:
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
u2是无符号的16位整数,因此理论上允许的string的最大长度是2^16-1=65535。然而实际测试表明,允许的最大长度仅为65534,超过就编译错误。
验证:
首先构造一个长度为65534的字符串
public static void main(String[] args){ // 构建一个长度为65534的字符串 String bigString = ""; int i = 0; boolean flag = true; while (flag) { i++; bigString += "a"; if (i == 65534) { flag = false; } } System.out.println("构造的字符串长度" + bigString.length()); System.out.println(bigString); }
运行,在控制台复制出输出的字符串,赋值给新定义的常量字符串,并且增加一个字节b,使得字符串长度为65535
public static void main(String[] args){ System.out.println("构造的字符串长度" + bigString.length()); // 常量字符串(1个b+ 65534个a = 65535个字符) |
运行上述代码,报常量字符串过长的错,说明常量字符串最多为65534个字节
本文来自博客园,作者:zhangpba,转载请注明原文链接:https://www.cnblogs.com/zhangpb/p/13321907.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)