美文网首页
java中的StringBuffer 和StringBuilde

java中的StringBuffer 和StringBuilde

作者: 呆呆的啊胖 | 来源:发表于2020-04-04 13:17 被阅读0次
String,StringBuffer,StringBuilder三者的对比
  • String:不可变的字符序列;底层使用char[]存储
  • StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
  • StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储
  • 三者的执行效率
    从高到低排列:StringBuilder > StringBuffer > String
字符串常量池中是不会存储相同内容(使用String类的equals()比较,返回true的字符串的)
public class StringBufferBuilder {
    /*StringBuffer的常用方法
    增:append(xxx)
    删:delete(int start,int end)
    改:setCharAt(int n ,char ch) / replace(int start, int end, String str)
    查:charAt(int n )
    插:insert(int offset, xxx)
    长度:length();
    遍历:for() + charAt() / toString()*/
    @Test
    public void test2(){
        StringBuffer s1 = new StringBuffer("abc");
        s1.append(1);
        s1.append("1");
        System.out.println(s1);

        s1.delete(2,4);//左闭右开
        System.out.println(s1);

        s1.replace(1,2,"hello");
        System.out.println(s1);

        s1.insert(2,"kkk");
        System.out.println(s1);

        s1.reverse();//反转
        System.out.println(s1);

        String s2 = s1.substring(1, 3);//切割重新建立了,需要建立s2接收
        System.out.println(s2);
    }

    /*
      String、StringBuffer、StringBuilder三者的异同?
      String:不可变的字符序列。底层使用char[]进行存储
      StringBuffer:可变的字符序列 线程安全的,效率偏低。底层使用char[]进行存储
      StringBuilder:可变的字符序列 线程不安全的,效率高 底层使用char[]进行存储
      源码分析:
       String str = new String();//new char[0]
       String str1 = new String("abc");//new char[]{'a','b','c'}

       StringBuffer sb1 = new StringBuffer();//char[] value = new char[16]
            //底层创建了一个长度是16的char类型数组
       sb1.append('a');//value[0]='a';
       sb1.append('b');//value[1]='b';

       StringBuffer sb2 = new StringBuffer("abc");//char[] value = new char["abc".length+10];

       //问题1:System.out.println(sb2.length());
         问题2:扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组
                默认情况下,扩容为原来容量的2倍+2 ,同时将原有数组中的元素复制到新的数组中
            开发中,建议使用StringBuffer或者StringBuilder

     */
    @Test
    public  void test1(){
        StringBuffer sb1 = new StringBuffer("abc");
        sb1.setCharAt(0,'m');//替换,把0位置上换成m
            //没有新建常量,而是直接修改,可变性
        System.out.println(sb1);

        StringBuffer sb2 = new StringBuffer();
        System.out.println(sb2.length());//0
    }
}

相关文章

网友评论

      本文标题:java中的StringBuffer 和StringBuilde

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