StringBuffer与Stringbuilder

1.方法

增: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()

2面试题:String,StringBuffer,StringBuilder三者的异同?
不同点:
String:不可变的字符序列;
StringBuffer:可变的字符序列;线程安全的,效率偏低。
StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高。
相同点:底层都是char[]存储

源码分析:
String str=new String();//char[] value=new char[0];
String str1=new String("abc");//char[] value=new char[]{'a','b','c'};

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

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

//问题一:System.out.println(sb2.length());//3  有效长度
//问题2:扩容问题:如果要添加的数据底层数组存不下了,那就需要扩容底层的数组
默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素复制到新的数组中。

  指导意义:开发中建议大家使用:StringBuffer(int capacity)//开始时就设置长度,避免扩容
  或者StringBuilder(int capacity)
posted @ 2021-04-07 13:56  袁中  阅读(36)  评论(0编辑  收藏  举报