StringBuffer和StringBuilder
可变字符串,但是本质上来讲,并不是字符串,而是字符串操作类
StringBuffer和StringBuilder
这两种对象中的方法一模一样
StringBuffer更加安全,但是效率低
StringBuilder不安全,但是效率高
StringBuilder builder = new StringBuilder();
buffer和builder对象并不是字符串,我们需要的是字符串的内容
将buffer或者builder转换为String类型
String content = buff.toString();
1.拼接 返回值为this,在此处this就是buff,所以返回值和调用方法的对象是同一个
StringBuffer sbuf = buff.append("abc");
sbuf.append("aa");
buff.append("abc").append("aA"); //等同于以上(用上一次的返回值调下一次,不用再接收)
System.out.println(buff); //abcaA (此处调用Object的重写toString,故内容)
向当前的字符串中插入内容 1.要插入的位置 (0到length) 2.要插入的内容
buff.insert(2, "A");
System.out.println(buff); //abAcaA
2.删除指定范围内容 ( 1)起始位置 2)结束位置 包含起始位置,不包含结束位置)
buff.delete(0, 2); //2之后的重新拷贝
System.out.println(buff); //AcaA
删除指定位置的字符
buff.deleteCharAt(0);
System.out.println(buff); //caA
3.修改指定位置的字符
buff.setCharAt(0, 'p');
System.out.println(buff); //paA
修改指定范围的内容,可以是字符串 (包含起始位置,不包含结束位置)
buff.replace(0, 1, "张三");
System.out.println(buff); //张三aA
4.字符串反转
buff.reverse();
System.out.println(buff); //Aa三张
5.可以指定底层的字符数组的长度,在字符的个数比数组长度小的时候,通过该方法,将数组长度设置为当前字符的个数,节约内存空间
buff.trimToSize();
String、StringBuffer、StringBuilder三者区别:
(1)String是不可变字符串;StringBuilder、StringBuffer可变字符串
(2)String、StringBuffer是线程安全,保证线程同步;StringBuilder非线程安全,不保证线程同步
(3)String不适合大量字符串的拼接,在JDK1.8时字符串常量拼接被自动优化成了StringBuiler
StringBuilder适合单线程情况下大量字符串的拼接
StringBuffer适合多线程大量字符串的拼接
(4)执行速度String(慢) < StringBuffer(较快) < StringBuilder(快)
(5)String[JDK1.0], StringBuffer[JDK1.0],StringBuilder[JDK1.5]
eg1:如下有几个字符串
String s = "a" + "b" + "c" + "d";
7个字符串 "a" "b" "c" "d"
"ab" "abc" "abcd"