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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李深山 中级黑马   /  2012-3-18 14:05  /  2729 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

StringBuffer和StringBuilder的区别,在使用过程中怎么选择,具体是如何使用的?请各位说说看。

10 个回复

倒序浏览
这两个在应用上没有区别,都是动态添加字符,但是StringBuffer主要用在多线程方面,它会考虑到线程的安全问题,StringBuilder则是用在单线程方面,不会考虑线程安全问题
回复 使用道具 举报
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为StringBuffer补充了一个单个线程使用的等价类,即 StringBuilder。与StringBuffer相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。 将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。



回复 使用道具 举报
1. StringBuffer的效率相对而言低一些
2. 一般情况不涉及线程安全用的都是StringBuilder,如果涉及到多线程安全问题一定要用StringBuffer
回复 使用道具 举报
StringBuilder是线程不安全的,运行效率高,如果单线程的,,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。
如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer。
回复 使用道具 举报
StringBuffer线程安全效率慢StringBuilder线程不安全但是高效。
回复 使用道具 举报
嗯,楼上说的很好,又进一步理解啦,谢谢
回复 使用道具 举报
使用StringBuffer时,线程是同步的,而StringBuilder是jdk1.5版本以后出来的,线程不同步,后者较前者效率较高,
故以后开发建议使用StringBuilder。
回复 使用道具 举报
StringBuffer是可变类,其对象为可修改的字符序列,比较适合用来频繁的修改字符串,比如常用的是添加(append);而且是线程安全的。当需要多次修改时,尽量用这个类。
当你使用String b = b+"aa";这样的语句的时候b实际上已经不是以前的那个对象,JVM重新划分了一块内存保存b+"aa"的结果,并使b的指向这块新内存。对于StringBuffer来说,b.append("aa");执行以后b仍然使用的是以前的那块内存空间。同时,对于原来b指向的内存还有内存回收的问题。  
StringBuilder是可变类,但基于单线程的,也就是说多线程是不安全的,其余和StringBuffer一样。所以速度相对较快,如果不涉及多线程
回复 使用道具 举报
String类是不可变类, 任何对String的改变都会引发新的String对象的生成;
而StringBuffer则是可变类, 任何对它所指代的字符串的改变都不会产生新的对象;
StringBuilder类: 不是线程安全的, 但在单线程中的性能比StringBuffer要高;
StringBufferr类: 是用来表示内容可变的字符串, 并提供了修改底层字符串的方法, 该类是线程安全的;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马