idea java常量字符串过长解决办法
1.情景展示
如上图所示,在idea中,运行报错:常量字符串过长。
2.原因分析
java常量字符串,允许的最大长度仅为65534。归根结底是javac的问题,本身和idea没关系,但也不是一点关系没有。按照此路径打开
如上图所示,将java文件编译成class文件,默认使用的编译器是javac。
3.解决方案
我们只要把它改成eclipse就可以了。也就是使用eclipse对java文件进行编译。
右下角,Apply
重新编译项目
运行结果:
字符串长度为21万,远大于6万。
提醒:
如果你是eclipse转过来的,我们知道在eclipse中,即使其它java类报错,只要即将运行的类没有报错(没有调用报错的类),就可以通过main方法直接运行;
但是,在idea中却不可以,但我们并不想立刻修改报错的类,如何像eclipse那样,也是按照上面的方法,将项目的java编译器改成eclipse就可以了。
20201106
注意:
这种方式并不是完美的解决方案,Java编译器改成eclipse后,存在的问题在于:
当我们所要单独运行的Java类或者项目中有@Slf4j注解时,咱们的main方法将无法单独运行。
这一点需要注意一下。
2022年4月9日18:06:43
4.关于String
在java当中,在运行期间,字符串的长度是有最大限制的:21亿,也就是4GB;
在编译期间,字符串的长度最大为:65534。
字符串的内容是由一个字符数组 char[] 来存储的,由于数组的长度及索引是整数,且String类中返回字符串长度的方法length() 的返回值也是int ,所以通过查看java源码中的类Integer我们可以看到Integer的最大范围是2^31 -1,由于数组是从0开始的,所以数组的最大长度可以使【0~2^31-1】通过计算是大概4GB。
但是通过翻阅java虚拟机手册对class文件格式的定义以及常量池中对String类型的结构体定义我们可以知道对于索引定义了u2,就是无符号占2个字节,2个字节可以表示的最大范围是2^16 -1 = 65535。
但是由于JVM需要1个字节表示结束指令,所以这个范围就为65534了。超出这个范围在编译时期是会报错的,但是运行时拼接或者赋值的话范围是在整形的最大范围。
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/13590092.html