http://www.Sina.com/http://www.Sina.com /
Java String 可以有多长?
1. 字符串有多长是指字符数还是字节数?
从一个问题开始,我们能延伸出这么多问题吗?
两种存在形式的模板代码:
//堆栈string longstr=' aaaaa . aaaaa ';2.字符串有几种存在形式?
从文件读取字符串:
//堆byte [ ] strbyte=load from file (new file ) (string.txt ) ); stringlongstr=new string (strbyte;3.字符串存在的形式有那些限制?
堆栈中的String //堆栈stringlongstr='aaaaa……aaaaa '; CONSTANT_Utf8_info{ u1 tag; u2 length; //16位证书2 ^ 16-1=655350至65535 u1 bytes [ length ]; //65535} Java String的字节长度为65535,是否知道堆栈中的String的最大长度可以适合65535字节?
我们写65535个a的时候,执行那个居然报告了错误:这种样板代码的形式是存在栈中。
你不考虑那个解吗? 是什么? 是什么?
找到了javac的源代码。 viewsrc/share/classes/com/sun/tools/javac/JVM/gen.Java
如何: checkStringConstant () )。
让我们看看Pool.MAX_STRING_LENGTH
路径:/lang tools/src/share/classes/com/sun/tools/javac/JVM/pool.Java
因此,String可以包含65534个字符,因为它必须小于65535。
因为有65534个拉丁字母,所以会让人思考中文字母能有多少个。
这时,有人说马上就能装65534/3个,没想到能装65535/3个中文。
我们再一起探索中文文字,我们再次取出javac源代码进行探索
路径:/lang tools/src/share/classes/com/sun/tools/javac/JVM/http://www.Sina.com /
写池方法
如果这里写着bs.length pool.max _ string _ length,就知道会抛出异常。 证明能输入65535/3个中文字符。
由此可见,这种通过从文件中读取字符串的形式是存在堆中。
error: constant string too long//堆byte [ ] strbyte=load from file (new file (string.txt ) ); stringlongstr=new string (strbyte; String内部存储为char数组,如果数组长度为int类型,则String允许的最大长度为Integer.MAX_VALUE,但会受到实际内存的影响。
String超过长度怎么解决? 由此可知,如果字符太长,可以通过写入文件并阅读文件来解决。
javac编译源github参考地址: https://github.com/infobip/infobip-open-JDK-8