java中String类型有没有限制,最大限制是多少?

Python026

java中String类型有没有限制,最大限制是多少?,第1张

严格来说,String确实有长度限制。\x0d\x0aString内部使用一个char[]数组来存放字符串的内容,数组下标是整型(也可以参考String的构造方法String(char value[], int offset, int count) ,可以知道字符数量是用整型表示),整型(Java规定32位)表示范围是2G,也就是说,Java数组最大的长度是2G,即字符串不能超过2G个字符。\x0d\x0aJava的数组大小还有没有别的限制?事实上数组大小不能超过Java堆的大小,而Java堆的最大尺寸可以通过启动参数指定,如果Java堆开得足够大,数组的最大长度是可以不断增大的。\x0d\x0a所以,理论上,字符串不能超过2G个字符,少于2G个字符都有可能。 \x0d\x0a但编码时有需要注意的地方,采用明文的方式,如果超过65534个字节,可能报编译错误,可参考下列网站(有一处错误,整型考虑到符号位,最大只到2G)。

数组最大的长度为Integer.MAX_VALUE

1.不过,我们在编写源代码的时候,如果使用

Sting

str

=

"aaaa"的形式定义一个字符串,那么双引号里面的ASCII字符最多只能有

65534

个。

2.因为在class文件的规范中,

CONSTANT_Utf8_info表中使用一个16位的无符号整数来记录字符串的长度的,最多能表示

65536个字节,而java

class

文件是使用一种变体UTF-8格式来存放字符的,null值使用两个字节来表示,因此只剩下

65536-

2

65534个字节。

3.也正是变体UTF-8的原因,如果字符串中含有中文等非ASCII字符,那么双引号中字符的数量会更少(一个中文字符占用三个字节)。如果超出这个数量,在编译的时候编译器会报错。