黑马程序员技术交流社区
标题:
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 最常用的方法:
package exercise;
public class TestStringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
//添加:
sb.append(true);//添加布尔类型 返回StringBuffer
sb.append('a');//添加字符 返回StringBuffer
sb.append(new char[]{'a', 'b'});//添加字符数组 返回StringBuffer
sb.append("abc");//添加字符串 返回StringBuffer
sb.append(1);//添加整形 返回StringBuffer
sb.append(new Object());//添加类 返回StringBuffer
sb.append(new StringBuffer());//添加StringBuffer对象 返回StringBuffer
//查找
sb.indexOf("abc");//查找字符串"abc",并返回第一次出现的角标位置 返回int
sb.indexOf("abc", 1);//从1角标开始查找,返回第一次出现的位置 返回int
sb.lastIndexOf("ab");//找最后一次出现字符串的位置 返回int
sb.lastIndexOf("ab", 1);//从角标1开始找最后一次出现字符串的位置 返回int
//插入
sb.insert(1, true);//和append一样,差别在于append是从最后一个位置开始增加,
//而insert是从指定位置开始增加 返回StringBuffer
//替代
sb.replace(1, 3, "22");//将角标1到角标3(不包括3)的位置间的字符串替换成“22”
//返回StringBuffer
//其他
sb.reverse();//倒序 返回StringBuffer
sb.substring(2);//从角标2开始截取字符串 返回String
sb.substring(2, 4);//截取2到4角标(不包括4)之间的字符串 返回String
sb.toString();//转换成String 返回String
}
}
复制代码
作者:
张勇1993
时间:
2013-6-28 09:17
加油 祝你早日进入黑马!实现自己的人生价值!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2