java 字符串很长_String:java:常量字符串过长

  • Post author:
  • Post category: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++;



版权声明:本文为weixin_34910465原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。