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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵京 中级黑马   /  2014-5-7 00:09  /  922 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问StringBuffer和StringBuilder以及String的区别是什么,回答详细一些

4 个回复

倒序浏览
String是不可变的,StringBuffer是可变的;StringBuffer是线程安全的,StringBuilder是非线程安全的。
因而在大部分情况下字符串的拼接速度为:StringBuilder>StringBuffer>String
解释如下:
因为String是不可变的(通过ide的debugger可以发现其属性大都为final类型),因此每次对其操作改变其变量值,其实是生成一个新的对象,然后将变量引用指向新对象;因此速度慢。

StringBuffer则不同,对其操作即直接操作对象指向的引用,无需产生新对象,速度很快;它是线程安全的,在维护多线程的同步等也会消耗一点性能。

StringBuilder是jdk5之后新增的,其用法与StringBuffer完全一致,但它是线程不安全的,在单线程中最佳,因为其不需要维护线程的安全,因此是最快的。
回复 使用道具 举报
你可以去看看这个帖子,我的解答
http://bbs.itheima.com/forum.php ... mp;page=1#pid716799
回复 使用道具 举报
谢谢,学习了
回复 使用道具 举报
第一从值方面考虑:String 是一个常量值,你可以看他的源码,他的类用了final修饰的,这就决定了这个对象是不会变化;StringBuilder和StringBuffer都是变化的,他们拼接字符串的效率要比String快。
第二从线程安全方面考虑:String 就不说了,他是不会改变的,StringBuffer是线程安全的,StringBuilder是线程非安全的。
第三从性能方面考虑: 因为StringBuffer是线程安全的,没有改变值的时候会判断锁,比较消耗资源,所以他的性能相对比StringBuilder要低 : 性能结论: StringBuilder>StringBuffer>String。所以,如果是在单线程中使用,就用StringBuilder。多线程就用StringBuffer
第四从拼接字符串方面考虑: String 一旦创建就没法改变,而另外两个功能比较类似,都可以任意插入、拼接、删除 字符串内容
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马