String与StringBuffer的区别
string:组拼的时候要产生新的对象,把两个string对象里的数据赋值相加到一个新的string中。string(赋值后不能修改)
stringBuffer:组拼的过程不需要创建新的对象,只会在内存开辟一块内存空间,内存使用要由于String类,在实际操作中,经常要对字符串进行修改,例如插入,删除等。
对比:StringBuffer 使用操作上方便,在内存使用比较好。
String, StringBuffer和StringBuilder
(1) String字符串的构造(一旦被赋值不能被修改)
(2) StringBuffer和StringBui lder可以创建一个可以被修改的字符串
(3)使用起来基本相同
(4)不同: StringBuffer线程安全,但是性能略低。StringBui lder线程不安全但是性能略高。(什么是线程安全)
(5)字符串的存储,在内存里面JDK9之前使用char数组存储, JDK9里面使用byte数组存储。
StringBuffer常用方法(stringBuilder类似)
1. append():追加字符串到末尾。
如果StringBuffer已经存满,那么重新开辟内存空间。(大小是当前储存大小的二倍,或者两个相加的大小。不用管)
StringBuffer s1=new StringBuffer("www");
s1.append("aaa");
//输出wwwaaa
2. deleteCharAt():删除指定索引的字符串
StringBuffer sb = new StringBuffer(“Test”);
sb. deleteCharAt(1);
对象sb的值变为”Tst”
3. delete(int start,int end)
该方法的作用是删除指定区间以内的所有字符。
StringBuffer sb = new StringBuffer(“TestString”);
sb. delete (1,4);
”TString”
4. insert (int offset,string s)
该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串
StringBuffer sb = new StringBuffer(“TestString”);
sb.insert(4,“false”);
sb的值是”TestfalseString”。
5. reverse()
该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。
StringBuffer sb = new StringBuffer(“abc”);
sb.reverse();
经过反转以后,对象sb中的内容将变为”cba”。
6. setCharAt(int index, char ch)
该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。
StringBuffer sb = new StringBuffer(“abc”);
sb.setCharAt(1,’D’);
则对象sb的值将变成”aDc”。
7. trimToSize()
该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。
8. 构造方法:
StringBuffer s0=new StringBuffer();分配了长16字节的字符缓冲区
StringBuffer s1=new StringBuffer(512);分配了512字节的字符缓冲区
9. 获取字符串的长度: length()
StringBuffer s = new StringBuffer("www");
int i=s.length(); //结果是3
10. subString(int start);subString(int start,int end);
m.返回字符串的一部分值
substring(int start) //返回从start下标开始以后的字符串
substring(int start,int end) //返回从start到 end-1字符串
11. replace(int start,int end,String str):替换字符串
StringBuffer s = new StringBuffer("www");
s.replace(0,1,"qqq"); //s中的值:qqqww
12. toString() :将stringBuffer 转换成string