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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张成龙 中级黑马   /  2012-5-7 14:19  /  2908 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

StringBuffer和stringBuild有什么区别,他们用法有什么不同?

5 个回复

正序浏览
StringBuffer和StringBuilder两者区别主要在效率和安全两个方面
当在单线程环境中操作字符串时使用StringBuilderd的效率较高,在多线程环境下为了数据的安全性使用StringBuffer。
回复 使用道具 举报
StringBuffer 和 StringBuilder 都是可变的。

线程安全方面的不同:
StringBuffer是线程安全的。若程序将要被多个线程访问,使用StringBuffer
若程序设计为只有一个单独的线程访问,StringBuilder会更有效率。


回复 使用道具 举报
  StringBuffer和StringBuilder类都表示内容可以被修改的字符串,StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer。
回复 使用道具 举报
是stringBuilder吧!
StringBuffer和stringBuilder有什么区别
他俩的共性:
底层都是用数组来实现,为什么可变呢(每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大)
他俩的不同:
stringBuilder 效率高,支持单线程(内部没有实现同步问题),不安全
StringBuffer效率低,支持多线程(内部帮你实现了同步问题),安全
回复 使用道具 举报
StringBuffer: 可改变的Unicode字符序列

允许并发操作,是线程安全的

String类在进行字符串连接时会显得效率很低,就是因为它所产生的对象的属性是不能够修改的,当连接字符串时也就只能创建新的对象。

对于很多字符串连接时,应当使用StringBuffer类,使用这个类的对象来进行字符串连接时就不会有多余的中间对象生成,从而优化了效率。

例:对于字符串连接String str = "A" + "B" + "C" + "D";

产生:"AB"、"ABC"、"ABCD"

在串池中产生的"AB"、"ABC"明显是多余对象,浪费空间。

                     解决方案:

String s = null;

StringBuffer sb = new StringBuffer("A");

sb.append("B");

sb.append("C");

sb.append("D");

s = sb.toString();



StringBulder: 可改变的Unicode字符序列

操作同StringBuffer,只是不支持并发操作,非线程安全的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马