黑马程序员技术交流社区

标题: StringBuffer精炼谁给说说 [打印本页]

作者: 韩超    时间: 2013-6-28 02:31
标题: StringBuffer精炼谁给说说
由于时间缘故,我没跟着视频学习。我找了一本书,那本书比较肤浅,但我可以接受得了。

那本书只讲了String和StringBuilder没讲StringBuffer,谁能用给我传授一下精炼的StringBuffer
作者: gzbbxu    时间: 2013-6-28 06:22
String类是不可变类,任何对String的改变都会引发新的String对象的生成;而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象
,新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。据我所知,入股不考虑线程的问题,两者都是一样,但是用StringBuilder最好
程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;当然,如果要保证线程安全,自然非StringBuffer莫属了。
除了对多线程的支持不一样外,这两个类的使用几乎没有任何差别
作者: zms2100    时间: 2013-6-28 08:32
本帖最后由 zms2100 于 2013-6-28 09:34 编辑

StringBuffer与StringBuilder基本上是一样的,视频跟你用的书相反是介绍String和StringBuffer,以及讲了两个字符串缓冲区的不同。
StringBuilder是StringBuffer的升级版,性能效率提高,但是StringBuilder是线程不安全的(两个类的方法功能基本上相同),建议用于单线程(而StringBuffer是线程安全,可用于多线程),
当然如果程序有多线程同步的话,也可以在保证线程安全的情况下使用StringBuilder,效率依旧比StringBuffer高。
PS: 课外补充点: 从JDK1.5版本后“+”字符串连接符的底层原理使用的是StringBuilder,在此之前用的是StringBuffer。
作者: liujkh123    时间: 2013-6-28 09:01
StringBuffer 与 Stringbuilder在功能上一模一样,只不过两种类在线程安全的问题上有所不同,StringBuffer对多线程是安全的,因为内部就使用了监视器,StringBuilder因为内部没有设置监视器,所以效率比StringBuffer高,在多线程中,如果能保证线程安全的话,使用StringBuilder是更好的选择。
StringBuffer 最常用的方法:
  1. package exercise;

  2. public class TestStringBuffer {
  3.         public static void main(String[] args) {
  4.                 StringBuffer sb = new StringBuffer();
  5.                
  6.                 //添加:
  7.                 sb.append(true);//添加布尔类型    返回StringBuffer
  8.                 sb.append('a');//添加字符    返回StringBuffer
  9.                 sb.append(new char[]{'a', 'b'});//添加字符数组   返回StringBuffer
  10.                 sb.append("abc");//添加字符串   返回StringBuffer
  11.                 sb.append(1);//添加整形   返回StringBuffer
  12.                 sb.append(new Object());//添加类   返回StringBuffer
  13.                 sb.append(new StringBuffer());//添加StringBuffer对象        返回StringBuffer
  14.                
  15.                 //查找
  16.                 sb.indexOf("abc");//查找字符串"abc",并返回第一次出现的角标位置        返回int
  17.                 sb.indexOf("abc", 1);//从1角标开始查找,返回第一次出现的位置        返回int
  18.                 sb.lastIndexOf("ab");//找最后一次出现字符串的位置        返回int
  19.                 sb.lastIndexOf("ab", 1);//从角标1开始找最后一次出现字符串的位置        返回int
  20.                
  21.                 //插入
  22.                 sb.insert(1, true);//和append一样,差别在于append是从最后一个位置开始增加,
  23.                                                    //而insert是从指定位置开始增加        返回StringBuffer
  24.                
  25.                 //替代
  26.                 sb.replace(1, 3, "22");//将角标1到角标3(不包括3)的位置间的字符串替换成“22”       
  27.                                                                 //返回StringBuffer
  28.                
  29.                 //其他
  30.                 sb.reverse();//倒序        返回StringBuffer
  31.                 sb.substring(2);//从角标2开始截取字符串        返回String
  32.                 sb.substring(2, 4);//截取2到4角标(不包括4)之间的字符串        返回String
  33.                 sb.toString();//转换成String 返回String               
  34.         }
  35. }
复制代码

作者: 张勇1993    时间: 2013-6-28 09:17
加油 祝你早日进入黑马!实现自己的人生价值!




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