美文网首页程序员
StringBuffer和StringBuilder

StringBuffer和StringBuilder

作者: 我可能是个假开发 | 来源:发表于2019-01-10 15:18 被阅读96次

    StringBuffer和StringBuilder

    字符串缓冲类:由于String是不可变的,在需要频繁改变字符对象的情况下,需要使用可变的字符串缓冲区类。

    特点:

    • 默认缓冲区的容量是16
    • StringBuffer:线程安全的所有的缓冲区操作方法都是同步的,效率低。

    一、添加方法

    • StringBuffer("hcx") 在创建对象的时候赋值
    • append() 在缓冲区的尾部添加新的文本对象
    • insert() 在指定的下标位置添加新的文本对象
    StringBuffer sb = new StringBuffer("hcx");
    sb.append(true);
    sb.append('a');
    sb.append(97).append(98).append(new char[]{'b','c'}); // 链式编程
    System.out.println(sb.toString());// 输出缓冲区的中文本数据   hcxtruea9798bc
    sb = new StringBuffer("hcx");
    sb.insert( 2, "java" );
    System.out.println( sb.toString() );//hcjavax
    

    二、查看方法

    • toString() 把字符串缓冲类的内容转成字符串返回。
    • indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。
    • substring(int start) 从开始的位置开始截取字符串
    • capacity() 查看当前字符数组的长度。
    StringBuffer sb1 = new StringBuffer("hcxx");
    System.out.println(sb1.indexOf("x"));//2
    System.out.println(sb1.lastIndexOf("x"));//3
    

    三、修改方法

    • replace(int start int endString str) 使用给定 String 中的字符替换此序列的子字符串中的字符。该子字符串从指定的start处开始,一直到索引end-1处的字符
    • setCharAt(int index char ch) 指定索引位置替换一个字符
    • substring(int start, int end) 根据指定的索引值截取子串。
    • ensureCapacity(int minimumCapacity) 指定StringBuffer内部的字符数组长度的。
    • reverse() 把字符串逆序输出。
    StringBuffer sb2 = new StringBuffer("helloworld");
    System.out.println(sb2.replace(2, 6, "java"));//替换掉 llow 包头不包尾  hejavaorld
    sb2.setCharAt(8, 'A');//l-->A
    System.out.println(sb2);//hejavaorAd
    StringBuffer sb4 = new StringBuffer("helloworld");
    System.out.println(sb4.reverse());//dlrowolleh
    

    四、删除方法

    • delete(int start,int end) start<=char<end 根据指定的开始与结束的索引值删除对应的内容。 清空缓冲区:delete(0,sb.length())
    • deleteCharAt(int index) 根据指定的索引值删除一个字符。
    StringBuffer sb3 = new StringBuffer("helloworld");
    System.out.println(sb3.delete(2, 4));//heoworld
    System.out.println(sb3.deleteCharAt(2));//heworld
    

    五、StringBuffer和StringBuilder的对比

    使用Stringbuffer无 参的构造函数创建一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?

    StringBuffer底层是依赖了一个字符数组才能存储字符数据的,该字符串数组默认的初始容量是16, 如果字符数组的长度不够使用时,自动增长1倍。

    StringBuffer 与 StringBuilder的相同处与不同处:

    相同点:
        1. 两个类都是字符串缓冲类。
        2. 两个类的方法都是一致的。
    不同点:
        1. StringBuffer是线程安全的,操作效率低 ,StringBuilder是线程非安全的,操作效率高。
        2. StringBuffer是jdk1.0出现 的,StringBuilder 是jdk1.5的时候出现的。
    

    推荐使用: StringBuilder,因为操作效率高。

    相关文章

      网友评论

        本文标题:StringBuffer和StringBuilder

        本文链接:https://www.haomeiwen.com/subject/iujarqtx.html