关于Java的String字符串常量的长度问题
来源:互联网 发布:淘宝导航字体颜色代码 编辑:程序博客网 时间:2024/04/28 18:13
虽然这种问题应该很难遇到,但是遇到了也会感到莫名其妙。不知道大家有没有遇到那种在java代码里用字符串写sql语句的情况,但是如果sql语句字符串的长度太长的话就会报错。
代码如下:
- 代码A
String str = "567890123456789...0123456789";//由于字符串长度太长,所以省略一部分,长度是65535System.out.println(str.length()); //编译报错:Error:(14, 22) java: 常量字符串过长
- 代码B
String str = "67890123456789...0123456789";//由于字符串长度太长,所以省略一部分,长度是65534System.out.println(str.length()); //编译通过,运行结果为:65534
- 代码C
String str = "67890123456789...0123456789";//由于字符串长度太长,所以省略一部分,长度是65534str = "5" + str;System.out.println(str.length()); //编译通过,运行结果为:65535
String内部是以char数组的形式存储,数组的长度是int类型,那么String允许的最大长度就是Integer.MAX_VALUE = 2^31 - 1 = 2147483647。又由于java中的字符是以16位存储的,因此大概需要4GB的内存才能存储最大长度的字符串。
不过这仅仅是对字符串变量而言,如果是字符串常量,如“abc”、”1234”之类写在代码中的字符串str,那么允许的最大长度取决于字符串在常量池中的存储大小,也就是字符串在class格式文件中的存储格式:
CONSTANT_Utf8_info { u1 tag; u2 length; u1 bytes[length];}
u2是无符号的16位整数,因此理论上允许的string str的最大长度是2^16-1=65535。然而实际测试表明,允许的最大长度仅为65534,超过就编译错误。
参考:http://www.blogjava.net/killme2008/archive/2009/01/15/251368.html
阅读全文
0 0
- 关于Java的String字符串常量的长度问题
- 关于Java的String字符串常量的长度问题
- JAVA中关于String类型的创建和字符串常量池的问题
- 关于常量字符串的问题
- java String类字符串常量的理解
- 问题求解,关于java随机生成指定长度的字符串
- 关于String.length()的长度问题
- 关于字符串常量池的问题
- c语言关于字符串常量的问题
- 关于函数返回字符串常量的问题
- 一个关于字符串常量池的问题
- 关于JAVA String长度的限制--转载
- java常量池中string的问题
- 总结:关于字符串长度的问题
- Java String类型的长度问题
- Java字符串常量池的问题
- 常量字符串的问题
- JAVA String对象和字符串常量的关系解析
- Unity3D PlayerPrefs 存取二进制数据
- 组队赛 A Promotions 深搜+逆向思维
- 5.16解题报告
- 记忆化01背包 我爱洗衣服啊
- -webkit-transform(元素变换)
- 关于Java的String字符串常量的长度问题
- POJ 2187 Beauty Contest 最远点对(旋转卡壳)
- java-jvm-heap-架构
- Linux用vi给文件加密和解密
- 结合源码谈谈 RunLoop 的应用场景(持续更新中)
- Python方法总结(1)——删除pandas DataFrame的某一/几列
- CF 803 F. Coprime Subsequences(数论题,莫比乌斯,容斥原理)
- Node自学中踩过的一些坑
- 快速排序