毫无疑问,String是一个Java开发工程师每天都需要打交道的类,那么如果问你String字符串的最大长度是多少,你知道吗?有的朋友可能想都没想,直接回答65535,那么问题来了,是真的吗?今天阿粉就带大家去研究一下。首先,对于String我们可以有如下用法:定义一个String类型的变量:privatestaticfinalStringSTRING_TEST="xxxxxxxxxxxx";或字符串newString="newString";通过在方法中定义一个String类型的变量,通过字节流创建一个字符串:byte[]bytes=newbyte[length];Strings=newString(bytes);;可能有朋友会说,这两个不是都定义了一个字符串变量,有什么区别呢?表面上看起来没有区别,但实际上区别还是挺大的。首先,第一种方式是定义一个静态类变量,或者普通的字符串变量。这种形式的字符串存储在堆栈中;第二种方法是将字符串存储在堆上。这时候有朋友又要问了,不同的地方有什么关系呢?首先,它有很大的关系!当字符串入栈时,根据class文件的result规范,我们可以看到所有使用的存储格式是这样的:CONSTANT_Utf8_info{u1tag;u2length;u1bytes[length];}其中u2是一种类似的数据类型Java中的int,但是它代表了一个2字节的数据类型,只是int是4个字节,也就是说允许的最大长度是65535个字符。这样我们就可以得到一个结果,当字符串存入栈内存时,字符串的长度可以达到65535。看到这里,小伙伴又不耐烦了,说:你看,我就说是65535,可我还是不相信。别着急,我们只讲了一半,接下来我们会看看第二种方式。很明显,第二种方法无论是通过字节流还是new一个对象,其存储位置都是在Java的堆内存中,而通过String的源码可以看出,底层是通过一个char[]数组来店铺。私有最终字符值[];那么我们就知道字符传输的大小和数组的长度是直接相关的。另外,在定义数组长度的时候,我们最多只能定义int类型的最大值,即Integer.MAX_VALUE=0x7fffffff;而String类的length()方法的返回值也可以看出,返回类型是int,最大值也是Integer.MAX_VALUE=0x7fffffff;/***Returnsthelengthofthisstring.*Thelengththisequaltothenumberof
