黑马程序员技术交流社区

标题: StringBuffer怎么区别StringBuilder [打印本页]

作者: 王鹏伟    时间: 2013-2-27 20:30
标题: StringBuffer怎么区别StringBuilder
StringBuffer线程同步,StringBuilder不同步,怎么体现出来线程同步的?具体什么情况区别使用这两个?

作者: 李挺    时间: 2013-2-27 20:34
StringBuffer应该里面有同步代码块吧
所以效率偏低
作者: Gaara    时间: 2013-2-27 20:37
StringBuffer类:是可变的,当一个StringBuffer被创建了以后,通过它的方法改变这个字符串
    对象的字符序列。一旦生成了最终的字符串,就可以调用toString()方法将其
    转换为一个String对象。
StringBuilder类:是JDK1.5以后出来的,跟StringBuffer基本相似。只是StringBuffer是线程
     安全的,StringBuilder性能略高(线程同步的话需要判断对象锁,所以效率会低。)如果要创建一个内容可变的字符串对象,
     就用它。


单线程下,两者的效率是一样的.
线程安全指的就是:在一个被用synchronized锁住的对象中,程序的某个线程执行到该对象的一个同步方法时,在这个线程执行完之前,其他的线程都无法执行到该对象的用synchronized修饰的任何方法.这就是所谓的线程安全了.

这再没技术分就不应该了吧。。。。。。。已经好久没加了



作者: 罗海云    时间: 2013-2-27 20:37
StringBuffer每次读写的时候都需要判断锁.以免其他线程都一起写同一种东西, 而StringBuilder是不同步的.相比于StringBuffer效率更高. 如果是多线程推荐用StringBuffer.就不需要自己去加锁. 单列就用StringBuilder..
作者: 黑马_位志国    时间: 2013-2-27 20:41
StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。
如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;
当然,如果要保证线程安全,自然非StringBuffer莫属了。
除了对多线程的支持不一样外,这两个类的使用几乎没有任何差别。
作者: 陈圳    时间: 2013-2-27 20:52
张文彬 发表于 2013-2-27 20:37
StringBuffer类:是可变的,当一个StringBuffer被创建了以后,通过它的方法改变这个字符串
    对象的字符 ...

版主们都很忙,我目测现在没满25分的,你看第一页,有几个帖子评过分.我看在新版开出以前,是木有希望满25.除非你找了几个牛叉的问题,或是解决了牛叉的问题,让人膜拜...
作者: Gaara    时间: 2013-2-27 20:58
陈圳 发表于 2013-2-27 20:52
版主们都很忙,我目测现在没满25分的,你看第一页,有几个帖子评过分.我看在新版开出以前,是木有希望满25.除 ...

其实版主们都挺不错的 呵呵 我很理解他们啊 都很认真负责 只是对自己技术分有些担忧啊  增加点得分概率呵呵
作者: 黄玉昆    时间: 2013-2-27 20:59
StingBuilder是比StringBuffer更新的,以后开发使用StringBilder就没错的,效率比较高,但是由于线程不同步,需要自己加锁的,使用Lock就可以了,可以自己加锁和解锁的。
作者: 陈圳    时间: 2013-2-27 21:06
张文彬 发表于 2013-2-27 20:58
其实版主们都挺不错的 呵呵 我很理解他们啊 都很认真负责 只是对自己技术分有些担忧啊  增加点得分概率呵 ...

版主们辛苦,这个大家都知道的,毕竟和我们一样,都学同样的,朝一个方向奋斗,还得管理着这个版面.我看你是比较痛苦...都混了99个小时了.还少3分...我给你一个方法.你提三个问题,要有建设性的.然后呢,等24小时后,直接呼版主.帖子一定要有建设性,要给人一种技术含量较高的感觉啊.这样你就过关了.我就这几天专抢技术分,最多时一天得了10分.年一过,再加上17期要开了,就少了...一天才一俩分.
作者: Gaara    时间: 2013-2-27 21:10
陈圳 发表于 2013-2-27 21:06
版主们辛苦,这个大家都知道的,毕竟和我们一样,都学同样的,朝一个方向奋斗,还得管理着这个版面.我看你是比 ...

好吧  我努力吧。。。。
作者: 贾文泽    时间: 2013-2-27 21:27
陈圳 发表于 2013-2-27 20:52
版主们都很忙,我目测现在没满25分的,你看第一页,有几个帖子评过分.我看在新版开出以前,是木有希望满25.除 ...

我的技术分够了,昨天24分踩了涛哥的一个沙发,顿时金佛滴泪,技术+1 就砸我头上了。。。
作者: 陈圳    时间: 2013-2-27 21:46
贾文泽 发表于 2013-2-27 21:27
我的技术分够了,昨天24分踩了涛哥的一个沙发,顿时金佛滴泪,技术+1 就砸我头上了。。。 ...

你看你真没出息...咋这技术分到了你这就变成佛爷的眼泪呢?不过你这即使技术分满了?能上17期么?
作者: 贾文泽    时间: 2013-2-27 22:01
陈圳 发表于 2013-2-27 21:46
你看你真没出息...咋这技术分到了你这就变成佛爷的眼泪呢?不过你这即使技术分满了?能上17期么? ...

我计划中的就是18期,学校还有事情要处理,一切皆在掌握之中:lol
作者: 谢洋    时间: 2013-2-27 22:26
  
下面是我查看API文档理解的示图:
下面几句话是根据API文档说明的个人理解:
1、  线程安全的可变字符序列(缓冲区里面的东西)
因为这个字符串序列是通过StringBuffer,象来操作,而这个对象对缓冲区中内容操作是同步代码方式;可变,大概是说可以对缓冲区序列内容进行修改;
2、  一个类似于的字符串缓冲区,但不能修改:
这里无法理解了,一会说行,一会说不行,请高手明示。
3、  虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容:
这一句大概是指oppend这些方法吧。
另外:不管是单线程操作,还是多线程操作,StringBuilder的效率要高:因为不管是在单线和或多线程中,StringBuffer都要做线程安全操作这一步内容

StringBuffer.png (12.18 KB, 下载次数: 54)

StringBuffer.png

作者: Gaara    时间: 2013-2-28 11:58
贾文泽 发表于 2013-2-27 22:01
我计划中的就是18期,学校还有事情要处理,一切皆在掌握之中

其实我的计划也是18期。。。。。。只不过一直不加  觉得有点不对啊




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