当前位置:首页 > 学习资源 > 讲师博文 > 为什么 idea 建议去掉 StringBuilder,使用“+”拼接字符串

为什么 idea 建议去掉 StringBuilder,使用“+”拼接字符串 时间:2024-01-16      来源:华清远见

1.字符的普通拼接

“+”号操作符必须是字符串拼接最常用的一种了,没有之一。使用“+”拼接字符串,其实只是Java提供的一个语法糖。

通过查看反编译以后的代码,我们可以发现,原来字符串常量在拼接过程中,是将String转成了StringBuilder后,使用其append方法进行处理的。

那么也就是说,Java中的“+”对字符串的拼接,其实现原理是使用StringBuilder.append()方法。

普通的几个字符串拼接成一个字符串,直接使用“+” 因为教材等原因,当前依旧有许多人拼接字符串时认为使用“+”耗性能,首选StringBuilder。实际上,从JDK5开始,Java编译器就做了优化,使用“+”拼接字符串,编译器编译后实际就自动优化为使用StringBuilder。新建测试类StringTest,分别创建使用“+”拼接字符串和使用StringBuilder拼接字符串的方法;并新增Junit测试用例,分别调用拼接字符串100000次(这里不是循环拼接,而是执行多次拼接,因为一次拼接耗时太少,看不出差异),打印耗时。

2.字符串的循环拼接

循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。

说明:下例中,反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行 append 操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费。

 

循环拼接一个长字符串,建议使用StringBuilder,虽然“+”拼接字符串编译后也会变成StringBuilder,但是每次循环处理都会new一个StringBuilder对象,耗时会大大增加。而直接使用StringBuilder,new一次就可以了,效率相对高。新增2个Junit测试用例,循环拼接10000次拼接一个字符串(次数少于上面的用例,因为拼接的是一个字符串,如果拼接次数太多,可能引发内存溢出):

3.总结

关于String、StringBuilder、StringBuffer这三个类在字符串处理中的地位不言而喻,我们用的最多的就是String 的“+”号操作符(最普遍)以及StringBuilder、StringBuffer的append()方法。

如果不是在循环体中进行字符串拼接的话,直接使用 String 的 “+” 就好了。

     单线程循环中操作大量字符串数据 → StringBuilder.append()

     多线程循环中操作大量字符串数据 → StringBuffer.append()

其实拼接字符串的方式还有很多种,包括String.concat()、String.join("", str1, str2)、StringUtils.join(str1, str2) 等,但在我们日常开发中最常用的就是 String 的 “+” 和 StringXXX.append()方法啦,只要掌握好这三种方式的使用场景,就基本能保证代码的高可用性了。好了,这篇文章就到这里,希望能够对你有帮助!

上一篇:一文看懂决策树

下一篇:“星闪NearLink:中国自主研发的短距离无线通信技术的创新与突破”

戳我查看嵌入式每月就业风云榜

点我了解华清远见高校学霸学习秘籍

猜你关心企业是如何评价华清学员的

干货分享
相关新闻
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2024 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部