StringBuffer Or StringBuilder
发布日期:2021-06-30 12:33:51 浏览次数:2 分类:技术文章

本文共 969 字,大约阅读时间需要 3 分钟。

stringbuffer固然是线程安全的,固然是比stringbuilder更慢,固然,在多线程的情况下,理论上是应该使用线程安全的stringbuffer的。

然而有谁给我一个实际的案例来显示你需要一个线程安全的string拼接器?

适用场景是什么?

最简单的回答是,stringbuffer基本没有适用场景,你应该在所有的情况下选择使用stringbuilder

即使你真的遇到了这样的场景,很不幸的是,恐怕你仍然有99.99…99%的情况下没有必要选择stringbuffer,因为stringbuffer的线程安全,仅仅是保证jvm不抛出异常顺利的往下执行而已,它可不保证逻辑正确和调用顺序正确。大多数时候,我们需要的不仅仅是线程安全,而是锁。

为什么会有stringbuffer的存在

如果真的没有价值,为什么jdk会提供这个类?

答案太简单了,因为最早是没有stringbuilder的,sun的人不知处于何种愚蠢的考虑,决定让stringbuffer是线程安全的,然后大约10年之后,人们终于意识到这是一个多么愚蠢的决定,意识到在这10年之中这个愚蠢的决定为java运行速度慢这样的流言贡献了多大的力量

于是,在jdk1.5的时候,终于决定提供一个非线程安全的stringbuffer实现,并命名为stringbuilder。顺便,javac好像大概也是从这个版本开始,把所有用加号连接的string运算都隐式的改写成stringbuilder,也就是说,从jdk1.5开始,用加号拼接字符串已经没有任何性能损失了。

使用String类的场景

在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算

使用StringBuffer类的场景

在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装

使用StringBuilder类的场景

在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等。

参考

https://www.zhihu.com/question/20101840/answer/18901280

转载地址:https://javaedge.blog.csdn.net/article/details/77940256 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(二)-HotSPot虚拟机对象探秘
下一篇:同步工具(未完待更新)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月15日 00时46分25秒