Java-StringBuffer、StringBuilder
public class StringBufferTest { /** * String \ StringBuffer \StringBuilder三者异同 * String:不可变的字符序列:底层使用char[]存储 * StringBuffer:可变的字符序列:线程安全的,效率偏低;底层使用char[]存储 * StringBuilder:可变的字符序列:线程不安全的,效率高;底层使用char[]存储 * <p> * <p> * <p> * 底层数据结构 * 源码分析 * String str=new String();//char [] value=new char[0] * String str=new String("abc");//char [] value=new char[]{'a','b','c'}; * <p> * StringBuffer sb1=new StringBuffer();//char [] value=new char[16];//底层创建了一个长度为16的数组 * sb1.append('a');//value[0]='a'; * sb1.append('b');//value[1]='b'; * <p> * StringBuffer sb2=new StringBuffer("abc");//char []value=new char["abc".length+16]{'a','b','c'}; * <p> * //问题一:System.out.println(sb2.length);//3 * <p> * //问题二:数组扩容(扩容问题):如果添加的数据,底层数组盛不下了,那就需要扩容底层的数组 * 默认情况下,扩容为原来容量的2倍+2,同时将原来数组中的元素复制到新的数组中。 * <p> * <p> * 尽量避免扩容,开发中建议使用StringBuffer(int capacity) 或 StringBuilder(int capacity) */ @Test public void test1() { //可变 StringBuffer stringBuffer = new StringBuffer("abc"); stringBuffer.setCharAt(0, 'm'); System.out.println(stringBuffer); } /** * StringBuffer常用方法 * StringBuffer append(xxx):提供了很多append()方法,用于进行字符串拼接 * StringBuffer delete(int start, int end):删除指定范围的内容【start,end) * StringBuffer deleteCharAt(int index):删除指定位置的字符 * StringBuffer replace(int start, int end, String str):把【start,end)位置替换为str * StringBuffer insert(int offset, XXX):在指定位置插入XXX * StringBuffer reverse():把当前字符序列逆转 * public int indexOf(String str) * public synchronized String substring(int start, int end):返回一个从start开始到end索引结束的左闭右开的子字符串 * public int length() * public char charAt(int n) * public void setCharAt(int n,char ch) * * * 总结: * 增:append(XXX) * 删:delete(int start, int end)\deleteCharAt(int index) * 改:replace(int start, int end, String str)\setCharAt(int n,char ch) * 查:charAt(int n) * 插入:insert(int offset, XXX) * 长度:length() * 遍历: * * * */ @Test public void test2() { // StringBuffer sb1=new StringBuffer(32); // sb1.append(1); // sb1.append("hello"); // System.out.println(sb1); // // sb1.delete(0,3); // System.out.println(sb1); // // StringBuffer sb2=new StringBuffer("helloworld"); // sb2.deleteCharAt(1); // System.out.println(sb2); // StringBuffer sb3=new StringBuffer("helloworld"); // sb3.replace(1,4,"test"); // System.out.println(sb3); // // StringBuffer sb4=new StringBuffer("abcd"); // sb4.insert(1,"123"); // System.out.println(sb4); // // StringBuffer s5=new StringBuffer("abcd"); // s5.reverse(); // System.out.println(s5); StringBuffer s6=new StringBuffer("abcdhello"); System.out.println(s6.indexOf("hello")); System.out.println(s6.substring(2, 5)); } }