String不可变的字符序列,底层使用char[]存储
- StringBuffer可变的字符序列,线程安全的,效率低;底层使用char[]数组存储
- StringBuilder可变的字符序列,JDK5.0新增的,线程不安全的,效率高;底层使用char[]数组存储
StringBuffer s1 = new StringBuffer("abc"); s1.setCharAt(0,'m'); System.out.println(s1);//mbc System.out.println(s1.length()); //3
- StringBuffer的常用方法总结:
@Test public void test2(){ StringBuffer str1 = new StringBuffer("abc"); //1.提供了很多append方法,用于字符串的拼接 str1.append(1); str1.append('d'); System.out.println(str1);//abc1d //2.删除指定位置的内容 str1.delete(1,3); System.out.println(str1);//a1d //3.把[start,end)位置替换为str StringBuffer str2 = new StringBuffer("HelloWorld"); StringBuffer replace = str2.replace(2, 5,"程序员"); System.out.println(replace);//He程序员World System.out.println(str2);//He程序员World //4.在指定位置插入xxx str2.insert(2,"666"); System.out.println(str2);//He666程序员World //5.返回指定子字符串在此字符串中第一次出现处的索引 System.out.println(str2.indexOf("6"));//2 System.out.println(str2.indexOf("666"));//2 //6.把当前字符序列逆转 str2.reverse(); System.out.println(str2); //7.subString 返回一个新的字符串,它是此字符串的从bedinIndex开始截取到最后的一个子字符串 StringBuffer str4 = new StringBuffer("Hello,java"); String substring1 = str4.substring(3); System.out.println(substring1); //8.返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包括)的一个子字符串 StringBuffer str3 = new StringBuffer("Hello,Android"); String substring = str3.substring(5, 8); System.out.println(substring);//,An //9.返回字符串的长度 System.out.println(str3.length());//13 //10.chartAt,查找某个位置下的元素 char c = str3.charAt(2); System.out.println(c);//l. //11.setChartAt,替换某个位置中的元素 str3.setCharAt(2,'f'); System.out.println(str3);//Heflo,Android }
输出结果,都在代码后面注释了出来,以上就是StringBuffer的常用办法,StringBuilder也是这些常用的方法,就不在这里一一去写了。
String,StringBuffer,StringBuilder三者之间的效率:
StringBuilder>StringBuffer>String
String,StringBuffer,StringBuilder三者使用的原则如下: