A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李娟 黑马帝   /  2011-12-20 14:31  /  2382 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李娟 于 2011-12-22 09:23 编辑

在动态类中使用StringBuilder比使用StringBuffer有什么优势?

7 个回复

倒序浏览
张老师不是说了么:当你知道这条路上就你自己走,你就闷着头暴走就可以--------------------------单线程(StringBuilder)
                  当你不知道是不是你自己的时候就要环顾一下四周看有没有车。--------------多线程(StringBuffer)
以下来自java帮助文档:
与StringBuffer类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1 很给力!

查看全部评分

回复 使用道具 举报
刘旭 黑马帝 2011-12-20 16:03:40
藤椅
StringBuilder线程不安全,但是效率高      StringBuffer则刚好相反
回复 使用道具 举报
StringBuilder 和  StringBuffer 没有硬性规定哪个用于多线程环境
他们都继承 AbstractStringBuilder 抽象类
只是StringBuffer内部方法比StringBuilder的内部方法有同步处理
当多个线程操作一个StringBuffer对象时有同步操作保证数据的安全
比如在一些方法内的字符串拼接 一般都用StringBuilder 提高性能
没有涉及到多线程访问的地方都可以用StringBuilder
回复 使用道具 举报
武超 黑马帝 2011-12-20 17:50:54
报纸
简单来说就是:相比于StringBuffer,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
回复 使用道具 举报
wsssx 2011-12-20 18:03:19
地板
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
郭繁森 黑马帝 2011-12-20 19:58:50
7#

tringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

StringBuilder和StringBuffer的总结如下:

1. 为了获得更好的性能,在构造 StirngBuffer 或 StirngBuilder 时应尽可能指定它的容量。当然,如果你操作的字符串长度不超过 16 个字符就不用了。
2. 相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。而在现实的模块化编程中,负责某一模块的程序员不一定能清晰地判断该模块是否会放入多线程的环境中运行,因此:除非你能确定你的系统的瓶颈是在 StringBuffer 上,并且确定你的模块不会运行在多线程模式下,否则还是用 StringBuffer 吧 J
3. 用好现有的类比引入新的类更重要。很多程序员在使用 StringBuffer 时是不指定其容量的(至少我见到的情况是这样),如果这样的习惯带入 StringBuilder 的使用中,你将只能获得 10 %左右的性能提升(不要忘了,你可要冒多线程的风险噢);但如果你使用指定容量的 StringBuffer ,你将马上获得 45% 左右的性能提升,甚至比不使用指定容量的 StirngBuilder 都快 30% 左右。

楼主看下
回复 使用道具 举报
刘健 黑马帝 2011-12-20 21:52:24
8#
看对安全的需求了,StringBuffer是线程安全的,而StringBuilder不是,而不安全的当然会速度比安全的快,看个人需求而定
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马