idea java常量字符串过长解决办法

1.情景展示

  如上图所示,在idea中,运行报错:常量字符串过长。

2.原因分析

  java常量字符串,允许的最大长度仅为65534。归根结底是javac的问题,本身和idea没关系,但也不是一点关系没有。按照此路径打开

  File -> Settings -> Build,Execution,Deployment -> Compiler ->

  如上图所示,将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了。超出这个范围在编译时期是会报错的,但是运行时拼接或者赋值的话范围是在整形的最大范围。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2020-08-31 16:11  Marydon  阅读(38510)  评论(2编辑  收藏  举报