其他分享
首页 > 其他分享> > String,StringBuilder,StringBuffer

String,StringBuilder,StringBuffer

作者:互联网

概括

String:不可变的字符序列,底层使用char[]存储

StringBuffer:可变的字符序列,线程安全的,效率低,char[]存储

StringBuilder:可变的字符序列,jdk5.0新增,线程不安全,效率高,char[]存储

源码分析

String str = new String();              // char[] value = new char[0]
String str = new String("abc");         // char[] value = new char[0]{'a','b','c'}
StringBuffer sb = new StringBuffer();   //char[] value = new char[16];
             sb.append("a");            //char[0]='a';
StringBuffer sb = new StringBuffer("abc");   //char[] value = new char["abc".length()+16];

StringBuilder和StringBuffer基本一样

扩容

如果添加的数据底层数组不够存,需要扩容,默认扩容到  原数组长度2倍+2,同时将原数组中的元素copy到新数组中

//需要扩容的时候,关键源码
int newCapacity = (value.length << 1) + 2;

编码建议

使用时预估字符长度,使用new StringBuilder(int capacity),new StringBuffer(int capacity)

StringBuffer线程安全

保证线程安全是通过方法使用synchronized关键字来实现的

StringBuffer,StringBuilder的常用方法

  增:append(xxxx):字符串拼接

  删:delete(int start,int end):删除指定位置的内容

  改:replace(int start,int end,String str)  :把[start,end)位置的字符串替换为str    |    void setCharAt(int n,char ch)

  查:char charAt() 

  长度:int length()

  插入:insert(int offset,xxx) 在指定位置插入xxx

  遍历:for()+charAt()  / toString()

  其他:

     reverse():字符序列逆转

     int indexOf(String str)

     String subString(int start,int end)

 

 

 

 

 

 

 

  

标签:String,int,StringBuilder,char,StringBuffer,new
来源: https://www.cnblogs.com/yb38156/p/16331978.html