当前位置:主页 > java教程 > java常量字符串过长报错

java常量字符串过长报错的解决办法以及原因分析

发布:2023-04-20 09:40:01 59


本站收集了一篇相关的编程文章,网友蒋紫云根据主题投稿了本篇教程内容,涉及到java、常量字符串过长、常量字符串过长的解决办法、java字符串长度限制、java常量字符串过长报错相关内容,已被459网友关注,内容中涉及的知识点可以在下方直接下载获取。

java常量字符串过长报错

1.发生问题的场景

我在用java获取一个接口的大JSON字符串,并赋值给String常量时,遇到了java: 常量字符串过长这个报错

2.解决问题

2.1 可以使用StringBuilder(线程不安全)或StringBuffer(线程安全,即append方法被synchronize修饰)的append方法来拼接一个String,最后再通过toString()方法转为String即可

2.2 也可以使用 += 符号来拼接字符串,在javac中,String的 += 符号被重载为了StringBuilder的append方法,有兴趣的可以去了解一下

3.问题的原因

那么为啥会报这个问题呢?翻阅jvm规范发现:

在java中,常量String的结构体如下,其中的string_index指针指向常量池的一个条目,这个条目的结构体格式为CONSTANT_Utf8_info

我们来看这个CONSTANT_Utf8_info 结构体,由下图可知一个String类型的常量的最大长度为2^16-1,但事实真的如此吗?

经过测试,我发现实际最多存2^16-1-1个字符,这是为什么呢?我先去下载了javac的源码(在lib/scr.zip中),我在\lib\src\jdk.compiler\com\sun\tools\javac\jvm|Gen.java中看到了:

而这个PoolWriter.MAX_STRING_LENGTH的值为:

所以可以得出,javac允许常量String保存的最大字节数为0xFFFF-1即2^16-2 !!!

最后挖个坑,不知道为啥StringBuilder、StringBuffer、+=符号是如何让String动态增长的?

4.参考

1.java String 到底有多长?String超出长度怎么解决?

2.字符串String的+和+=及循环操作String的原理

总结

到此这篇关于java常量字符串过长报错解决的文章就介绍到这了,更多相关java常量字符串过长报错内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


参考资料

相关文章

  • java异步编程之一文看完其异步函数表

    发布:2023-04-24

    这篇文章主要为大家介绍了java异步编程之一文看完其异步函数表示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • Java应用层协议WebSocket实现消息推送

    发布:2023-03-28

    后端向前端推送消息就需要长连接,首先想到的就是websocket,下面这篇文章主要给大家介绍了关于java后端+前端使用WebSocket实现消息推送的详细流程,需要的朋友可以参考下


  • Java.lang.Long.parseLong()方法详解及示例

    发布:2023-04-18

    这个java.lang.Long.parseLong(String s) 方法解析字符串参数s作为有符号十进制长,下面这篇文章主要给大家介绍了关于Java.lang.Long.parseLong()方法详解及示例的相关资料,需要的朋友可以参考下


  • jvm--Java中init和clinit的区别点整理

    发布:2020-01-21

    下面小编就为大家带来一篇详谈jvm--Java中init和clinit的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧


  • Java在不存在文件夹的目录下创建文件实例代码

    发布:2019-11-12

    这篇文章主要介绍了Java如何在不存在文件夹的目录下创建文件,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下


  • Java项目安全处理方法

    发布:2022-06-23

    给网友朋友们带来一篇关于Java的教程,这篇文章主要介绍了Java项目安全处理方法,URL中参数显示,sql拼接问题,需要的朋友可以参考下


  • Java中super和this的用法及区别

    发布:2020-02-27

    这篇文章主要介绍了Java super和this的对比及使用的相关资料,java中this与super会经常在使用的时候混淆,需要的朋友可以参考下


  • 详解bootstrap table双击可编辑、添加、删除行

    发布:2020-02-19

    这篇文章主要为大家详细介绍了bootstrap table实现双击可编辑、添加、删除行功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


网友讨论