大家好,欢迎来到IT知识分享网。
1.发生问题的场景
我在用java获取一个接口的大JSON字符串,并赋值给String常量时,遇到了java: 常量字符串过长这个报错。
2.解决问题
2.1 可以使用StringBuilder(线程不安全)或StringBuffer(线程安全,即append方法被synchronize修饰)的append方法来拼接一个String,最后再通过toString()方法转为String即可
2.2 也可以使用 += 符号来拼接字符串,在javac中,String的 += 符号被重载为了StringBuilder的append方法,有兴趣的可以去了解一下
3.问题的原因
那么为啥会报这个问题呢?这是由于当前String字符串是来自常量池中的引用,而常量池中的String是定长的,如下:
而为什么要使用StringBuilder、StringBuffer或者+=呢?因为它们能保证当前的String字符串的引用是来自堆中的引用,而堆中的String是可以动态分配长度的。
另外
关于StringBuilder.append()与+=符号的区别:append()方法是在原始的String字符串后面继续添加,而+=符号会在堆中创建一个新的字符串,并修改原来的对引用为这个新的字符串地址!
综上,使用StringBuilder/StringBuffer的append()方法为最优解。
4.参考
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110558.html
