我正在尝试解决 Java 中的 CodeChef 问题,发现我无法创建长度大于一百万个字符的字符串(至少使用我的编译器)。我将 Pi 的前一百万个十进制数字粘贴到 Java 文件中的字符串中(例如 String PI = "3.1415926535...151"),但编译失败。当我取出 Pi 并用较短的字符串(如“dog”)替换它时,代码会编译。谁能确认这是否确实是 Java 的限制?
谢谢。
我正在尝试解决 Java 中的 CodeChef 问题,发现我无法创建长度大于一百万个字符的字符串(至少使用我的编译器)。我将 Pi 的前一百万个十进制数字粘贴到 Java 文件中的字符串中(例如 String PI = "3.1415926535...151"),但编译失败。当我取出 Pi 并用较短的字符串(如“dog”)替换它时,代码会编译。谁能确认这是否确实是 Java 的限制?
谢谢。
谁能确认这是否确实是 Java 的限制?
是的。字符串文字1的长度限制为 65535 。JLS中没有说明,但是通过class文件的结构隐含了;请参阅JVM Spec 4.4.7并注意字符串长度字段是 'u2' ...这意味着 16 位无符号整数。
请注意,String 对象最多可包含 2^31 - 1 个字符。2^16 -1 限制适用于字符串文字;例如,嵌入在Java 程序源代码中的字符串常量。
1 - 此限制实际上是字符串的(修改的)UTF-8 表示中的字节数。如果字符串由 0x01 到 0x7f 范围内的字符组成,则每个字节代表一个字符。否则,一个字符最多需要 6 个字节。
如果您想要一个表示 Pi 的前一百万位数字的字符串,那么最好从文件系统中的文件或类路径上的资源中读取字符。
我认为这个问题与字符串文字无关,而是与方法大小有关:http ://chrononsystems.com/blog/method-size-limit-in-java 。据此,该方法的大小不能超过64k。