黑马程序员技术交流社区

标题: 字符串的两个扩展类 [打印本页]

作者: 李娟    时间: 2011-12-20 14:31
标题: 字符串的两个扩展类
本帖最后由 李娟 于 2011-12-22 09:23 编辑

在动态类中使用StringBuilder比使用StringBuffer有什么优势?
作者: 侯伟浩    时间: 2011-12-20 15:14
张老师不是说了么:当你知道这条路上就你自己走,你就闷着头暴走就可以--------------------------单线程(StringBuilder)
                  当你不知道是不是你自己的时候就要环顾一下四周看有没有车。--------------多线程(StringBuffer)
以下来自java帮助文档:
与StringBuffer类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
作者: 刘旭    时间: 2011-12-20 16:03
StringBuilder线程不安全,但是效率高      StringBuffer则刚好相反
作者: 黑马巩伟伟    时间: 2011-12-20 16:08
StringBuilder 和  StringBuffer 没有硬性规定哪个用于多线程环境
他们都继承 AbstractStringBuilder 抽象类
只是StringBuffer内部方法比StringBuilder的内部方法有同步处理
当多个线程操作一个StringBuffer对象时有同步操作保证数据的安全
比如在一些方法内的字符串拼接 一般都用StringBuilder 提高性能
没有涉及到多线程访问的地方都可以用StringBuilder

作者: 武超    时间: 2011-12-20 17:50
简单来说就是:相比于StringBuffer,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

作者: wsssx    时间: 2011-12-20 18:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: 郭繁森    时间: 2011-12-20 19:58

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
看对安全的需求了,StringBuffer是线程安全的,而StringBuilder不是,而不安全的当然会速度比安全的快,看个人需求而定




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2