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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邢勇 黑马帝   /  2011-9-27 09:57  /  2877 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

StringBuffer 与 StringBuilder 这两个类功能差不多吧,那么他们的区别在哪里,具体都用在什么地方呢,如果在两者都可以用的情况下,用哪个比较好呢?

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

6 个回复

倒序浏览
黑马网友  发表于 2011-9-27 10:00:00
沙发
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
StringBuffer 与 StringBuilder 方法和功能一样,StringBuilder 是 JDK 1.5后来加上的,
StringBuffer 中的方法一般用 synchronized 修饰,因此是线程安全。

另外根据其他同学的资料,从 JDK 1.5 开始,带有字符串变量的连接操作(+),JVM 内部采用
StringBuilder 实现,而以前是StringBuffer 来实现。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
两者区别:StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer。
就好比过马路,StringBuilder像是一个莽汉,不看是否有车。一直往前冲。但是在只有他一个人路上就安全,效率高。StringBuffer就是一个会看车的人,经常有其他的时间开销,效率就会降低,在有车的路上走就安全多也就是多线程的环境下。
具体的还要看使用的环境决定用哪个.
StringBuffer和StringBuilder类都表示内容可以被修改的字符串。查看文档,两者都提供了很多的操作方法。大致都一样。
[ 本帖最后由 zhousaowen 于 2011-09-27  10:15 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 13:53:55
报纸
StringBuilder和StringBuffer的功能是一样的,但是StringBuilder是线程不安全的且是不同步的,而StringBuffer是线程安全的且是同步的。当是单线程时建议使用StringBuilder,因为它是线程不同步的,所以就不用判断锁了,从而提高了效率,当是多线程时建议使用StringBuffer,因为这样可以保证安全。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 20:11:14
地板
哦 如果程序中存在多线程安全的问题就要用StringBuffer呗,一般情况就用StringBuilder

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 20:28:08
7#

stringbuffer和stringbuiled

其实StringBuffer和StringBuilder 二者差不多 ,没多大的差别
但有一点注意:StringBuilder 是线程不同步的 也就是说操作字符串的效率要高点
是线程同步的 效率低点  但是 我们平时用的最多的还是StringBuffer。
因为我们只有一个线程去操作字符串  但在一个方法中去操作字符串  通常都是StringBuffer

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马