黑马程序员技术交流社区

标题: 关于StringBuilder,StringBuffer [打印本页]

作者: awkflf11    时间: 2014-3-22 00:55
标题: 关于StringBuilder,StringBuffer
自己在看毕老师的java视频,,看到一个问题:
JDK1.5出现一个StringBuilder,StringBuffer和StringBuilder。
然后他说到他们的区别?
区别是StringBuffer是同步的,StringBuilder是非同步的
但他又说到:我们以后开发经常会用到StringBuilder,而不是StringBuffer>>.
请问这是为什么??


我只知道既然StringBuilder是同步的,那他应该安全啊、、在开发中为了安全,,怎么不常用那???不解,,
作者: 小海    时间: 2014-3-22 10:33
因为StringBuilder比StringBuffer的效率高,单线程用StringBuilder,多线程用StringBuffer,在开发中效率是最重要的,加不加锁的不重要,如果需要这样的同步,建议用StringBuffer
作者: luoyilan222    时间: 2014-3-22 14:30
总的来说是效率问题:StringBuilde被设计用作 StringBuffer 的一个简易替换,因为在字符串缓冲区被单个线程使用(这种情况很普遍)。应为是单个线程就不需要考虑线程安全问题所以使用StringBuilde。
作者: Amorvos    时间: 2014-3-22 18:46
安全也牺牲了效率,所以说StringBuilder效率更高,更常用。
对于同步问题,完全可以用Collections中的方法辅助实现
作者: 孟茹    时间: 2014-3-23 09:53
其实,StringBuffer和StringBuilder作用差不多,可是如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;当然,如果要保证线程安全,即考虑到线程同步的时候,自然非StringBuffer莫属了。

作者: 南湘雨梦    时间: 2014-3-23 19:49
StringButter效率低,同步可以自己写,这样即保证了安全,又有了效率
作者: tcny    时间: 2014-3-25 21:48
毕老师的意思是,单线程时用StringBuilder,多线程时用StringBuffer,但是多线程时,我们依然可以用StringBuilder,因为我们可以自己实现锁的机制。  另外我想说的是,安全与效率往往是互相矛盾的,在实际开发中要根据实际的需求来选择效率还是安全优先。




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