Java-StringBuffer、StringBuilder

public class StringBufferTest {
    /**
     * String \ StringBuffer \StringBuilder三者异同
     * String:不可变的字符序列:底层使用char[]存储
     * StringBuffer:可变的字符序列:线程安全的,效率偏低;底层使用char[]存储
     * StringBuilder:可变的字符序列:线程不安全的,效率高;底层使用char[]存储
     * <p>
     * <p>
     * <p>
     * 底层数据结构
     * 源码分析
     * String str=new String();//char [] value=new char[0]
     * String str=new String("abc");//char [] value=new char[]{'a','b','c'};
     * <p>
     * StringBuffer sb1=new StringBuffer();//char [] value=new char[16];//底层创建了一个长度为16的数组
     * sb1.append('a');//value[0]='a';
     * sb1.append('b');//value[1]='b';
     * <p>
     * StringBuffer sb2=new StringBuffer("abc");//char []value=new char["abc".length+16]{'a','b','c'};
     * <p>
     * //问题一:System.out.println(sb2.length);//3
     * <p>
     * //问题二:数组扩容(扩容问题):如果添加的数据,底层数组盛不下了,那就需要扩容底层的数组
     * 默认情况下,扩容为原来容量的2倍+2,同时将原来数组中的元素复制到新的数组中。
     * <p>
     * <p>
     * 尽量避免扩容,开发中建议使用StringBuffer(int capacity) 或 StringBuilder(int capacity)
     */
    @Test
    public void test1() {
        //可变
        StringBuffer stringBuffer = new StringBuffer("abc");
        stringBuffer.setCharAt(0, 'm');
        System.out.println(stringBuffer);

    }


    /**
     * StringBuffer常用方法
     *  StringBuffer append(xxx):提供了很多append()方法,用于进行字符串拼接
     *  StringBuffer delete(int start, int end):删除指定范围的内容【start,end)
     *  StringBuffer deleteCharAt(int index):删除指定位置的字符
     *  StringBuffer replace(int start, int end, String str):把【start,end)位置替换为str
     *  StringBuffer insert(int offset, XXX):在指定位置插入XXX
     *  StringBuffer reverse():把当前字符序列逆转
     *  public int indexOf(String str)
     *  public synchronized String substring(int start, int end):返回一个从start开始到end索引结束的左闭右开的子字符串
     *  public int length()
     *  public char charAt(int n)
     *  public void setCharAt(int n,char ch)
     *
     *
     *  总结:
     *  增:append(XXX)
     *  删:delete(int start, int end)\deleteCharAt(int index)
     *  改:replace(int start, int end, String str)\setCharAt(int n,char ch)
     *  查:charAt(int n)
     *  插入:insert(int offset, XXX)
     *  长度:length()
     *  遍历:
     *
     *
     *
     */
    @Test
    public void test2()
    {
//        StringBuffer sb1=new StringBuffer(32);
//        sb1.append(1);
//        sb1.append("hello");
//        System.out.println(sb1);
//
//        sb1.delete(0,3);
//        System.out.println(sb1);
//
//        StringBuffer sb2=new StringBuffer("helloworld");
//        sb2.deleteCharAt(1);
//        System.out.println(sb2);

//        StringBuffer sb3=new StringBuffer("helloworld");
//        sb3.replace(1,4,"test");
//        System.out.println(sb3);
//

//        StringBuffer sb4=new StringBuffer("abcd");
//        sb4.insert(1,"123");
//        System.out.println(sb4);

//
//        StringBuffer s5=new StringBuffer("abcd");
//        s5.reverse();
//        System.out.println(s5);

          StringBuffer s6=new StringBuffer("abcdhello");
          System.out.println(s6.indexOf("hello"));
          System.out.println(s6.substring(2, 5));


    }


}

 

posted @ 2020-08-09 11:30  orz江小鱼  阅读(80)  评论(0编辑  收藏  举报