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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩超 中级黑马   /  2013-6-28 02:31  /  1900 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

由于时间缘故,我没跟着视频学习。我找了一本书,那本书比较肤浅,但我可以接受得了。

那本书只讲了String和StringBuilder没讲StringBuffer,谁能用给我传授一下精炼的StringBuffer

评分

参与人数 1技术分 +1 收起 理由
张勇1993 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
String类是不可变类,任何对String的改变都会引发新的String对象的生成;而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象
,新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。据我所知,入股不考虑线程的问题,两者都是一样,但是用StringBuilder最好
程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;当然,如果要保证线程安全,自然非StringBuffer莫属了。
除了对多线程的支持不一样外,这两个类的使用几乎没有任何差别

评分

参与人数 1技术分 +1 收起 理由
张勇1993 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 zms2100 于 2013-6-28 09:34 编辑

StringBuffer与StringBuilder基本上是一样的,视频跟你用的书相反是介绍String和StringBuffer,以及讲了两个字符串缓冲区的不同。
StringBuilder是StringBuffer的升级版,性能效率提高,但是StringBuilder是线程不安全的(两个类的方法功能基本上相同),建议用于单线程(而StringBuffer是线程安全,可用于多线程),
当然如果程序有多线程同步的话,也可以在保证线程安全的情况下使用StringBuilder,效率依旧比StringBuffer高。
PS: 课外补充点: 从JDK1.5版本后“+”字符串连接符的底层原理使用的是StringBuilder,在此之前用的是StringBuffer。

评分

参与人数 1技术分 +1 收起 理由
张勇1993 + 1 很给力!

查看全部评分

回复 使用道具 举报
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. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
张勇1993 + 2 很给力!

查看全部评分

回复 使用道具 举报
加油 祝你早日进入黑马!实现自己的人生价值!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马