365beat-beat365官方网站手机版-365账号无法登陆

Java StringBuffer 和 StringBuilder 类

JAVA 中的 StringBuilder 和 StringBuffer 适用的场景是什么? 最简单的回答是,stringbuffer 基本没有适用场景,你应该在所有的情况下选择使用 stringbuiler

Java StringBuffer 和 StringBuilder 类

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

最简单的回答是,stringbuffer 基本没有适用场景,你应该在所有的情况下选择使用 stringbuiler,除非你真的遇到了一个需要线程安全的场景,如果遇到了,请务必在这里留言通知我。

然后,补充一点,关于线程安全,即使你真的遇到了这样的场景,很不幸的是,恐怕你仍然有 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***[email protected]

参考地址

8年前 (2018-05-07)

← 上一篇: 黄冈数学好吗 黄冈名卷怎么样?
下一篇: 鼠标使用寿命分析:影响因素与维护技巧大揭秘 →

相关推荐

从杀牛卖肉的穷老头到百家宗师、兵家鼻祖,姜子牙怎样逆袭?

从杀牛卖肉的穷老头到百家宗师、兵家鼻祖,姜子牙怎样逆袭?

原创 陈华 时拾史事 本文系时拾史事独家原创稿件,未经授权严禁转载 他在后世的名气大得吓人,一句“姜太公在此,诸神退位”,吓坏多少苦

直播用什么声卡好听 如何选择适合你的直播声卡 | 提升直播音质的关键要素

直播用什么声卡好听 如何选择适合你的直播声卡 | 提升直播音质的关键要素

提升直播音质:直播用什么声卡好听?一份详细的选择指南 在竞争激烈的直播世界里,画质固然重要,但音质往往是决定观众能否长时间停留、

魔法王座天赋怎么点厉害?三大天赋点法详解

魔法王座天赋怎么点厉害?三大天赋点法详解

魔法王座游戏中狂暴、圣堂、巨人三大天赋怎样加点最厉害?下面小编就为大家详细的介绍下安达天赋的最佳加点攻略。 狂暴天赋 狂暴天赋里

2025年最佳电商POS系统推荐:提升线上销售与门店运营效率

2025年最佳电商POS系统推荐:提升线上销售与门店运营效率

想要找到一款称心如意的电商POS系统?选错了,就像穿错尺码的鞋子,怎么走都别扭。别担心,今天我就帮你一口气梳理出2025年最值得关注的7

如何获取爱奇艺奇点的详细步骤

如何获取爱奇艺奇点的详细步骤

登录爱奇艺并进入个人中心要获得爱奇艺的奇点,首先需要在手机上打开爱奇艺应用程序。如果你还没有下载,可以在各大应用商店搜索“爱奇

刘德华祖籍哪里人?探寻巨星的根源

刘德华祖籍哪里人?探寻巨星的根源

1997 年,对于刘德华来说,是意义非凡的一年,这一年,他踏上了归乡之路,回到了广东江门新会荷塘镇镭步村,开启了认祖归宗之旅 。这一年