package A_ShangGuiGu.String;
import org.junit.Test;
public class StringBuffer_StringBuilder {
/**
* String:不可变序列,底层使用char[]存储
* StringBuffer:可变的字符序列,线程安全的,效率低,底层使用char[]存储
* StringBuilder:可变的字符序列,线程不安全,效率高,底层使用char[]存储
*/
@Test
public void test1(){
StringBuffer sb1 = new StringBuffer();//相当于造了一个空的数组,容量为16位
System.out.println(sb1.length());//结果为0,因为数组中有0个元素,或者说没有元素,与长度无关,与元素个数有关
StringBuffer sb2 = new StringBuffer("abc");//相当于造了一个19位的数组,字符个数加16一个19个空间
System.out.println(sb2.length());//结果为3
/*
字符串扩容问题:如果要添加的字符长度太长,底层数组放不下了,那就需要扩容底层的数组。
默认情况下扩容为原来容量的2倍+2,同时将原有数组中的元素复制进新的数组中。
*/
}
@Test
public void test2(){
/**
* append:顺序添加
* delete:删除,左闭右开
* replace:替换,左闭右开
* insert:添加在指定位置
* reverse:反转字符串
* indexof:返回指定字符在数组中首次出现的位置。
* substring:返回一个在父字符串数组中下标左闭右开的子字符串
* length:返回字符串数组的长度。
* charAt:提取字符串数组中指定位置的元素
* setcharAt:将指定位置的字符改成新的字符。
*/
StringBuffer sb1 = new StringBuffer("abcdefghijklmnopqrstuvwxyz");
sb1.append("00000");//
System.out.println(sb1);
sb1.delete(1,25);//从第[1]个元素开始,包括第[1]个元素,从第[25]个元素结束,但是不包括第[25]个元素
System.out.println(sb1);
sb1.replace(1,7,"aaa");
System.out.println(sb1);
sb1.insert(3,"111111");
System.out.println(sb1);
sb1.reverse();
System.out.println(sb1);
int i = sb1.indexOf("1");
System.out.println(i);
System.out.println(sb1.length());
char c = sb1.charAt(0);
System.out.println(c);
}
}