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