当前位置: 首页 > 游戏攻略 > Java中的StringBuilder和StringBuffer适用场景

Java中的StringBuilder和StringBuffer适用场景

来源:网络 作者:趣玩小编 发布时间:2024-07-06 09:01:14

转自菜鸟教程的一位大哥-------未之奋豆

未之奋豆

429***663@qq.com

参考地址

6年前 (2018-05-07)

JAVA 中的 StringBuilder 和 StringBuffer 适用的场景是什么?

最简单的回答是,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开始,用加号拼接字符串已经没有任何性能损失了。

如诸多评论所指出的,我上面说,"用加号拼接字符串已经没有任何性能损失了"并不严谨,严格的说,如果没有循环的情况下,单行用加号拼接字符串是没有性能损失的,Java编译器会隐式的替换成StringBuilder,但在有循环的情况下,编译器没法做到足够智能的替换,仍然会有不必要的性能损耗,因此,用循环拼接字符串的时候,还是老老实实的用StringBuilder吧。

未之奋豆

未之奋豆

429***663@qq.com

参考地址

6年前 (2018-05-07)

热门推荐 更多 +
休闲益智 | 945.71MB
我的世界是一款风靡全球的3D第一人称沙盒...
9.6
角色扮演 | 878.96MB
最新版《汉家江湖》是一款以武侠为题材、以...
9.5
飞行射击 | 262.79MB
《荒野乱斗》是快节奏射击类多人对战游戏。...
9.5
飞行射击 | 102.9M
掌上飞车手游app是由腾讯特别为QQ飞车...
9.2
休闲益智 | 263.56MB
开心消消乐是一款轻松休闲的手游,也是一款...
9.6