StringBuffer和StringBuilder的区别:
StringBuffer中的方法都有:synchronized关键字修饰,表示在多线程运行下是 安全的。
StringBuilder中的方法都没有:synchronized关键字修饰,在多线程环境下运 行不安全。
即StringBuffer是线程安全的。
StringBuilder是非线程安全的。
一、StringBuffer
1.常用构造方法
//1.StringBuffer()
//构造一个没有字符的字符串缓冲区,初始容量为16个字符。
StringBuffer stringBuffer01 = new StringBuffer();
//2.StringBuffer(int capacity)
//构造一个没有字符的字符串缓冲区和指定的初始容量。
StringBuffer stringBuffer02 = new StringBuffer(100);
//3.StringBuffer(String str)
//构造一个初始化为指定字符串内容的字符串缓冲区。容量在此基础上加16。
StringBuffer stringBuffer03 = new StringBuffer("hello,world");
在创建StringBuffer的时候尽可能给定一个初始化容量, 最好减少底层数组的扩容次数,预估计一下,给一个大一些的初始化容量以实现优化效果。
2.StringBuffer常用方法(注释方法前为返回值类型)
StringBuffer stringBuffer01 = new StringBuffer();
StringBuffer stringBuffer02 = new StringBuffer();
//1.StringBuffer append(String str)
//将指定的字符串附加到此字符序列。(不一定是String类型,很多均可)
stringBuffer01.append("Hellojava"); //此时stringBuffer01的内容为"Hellojava"。
stringBuffer02.append(123456); //此时stringBuffer02的内容为"123456"。
//2.int capacity()
//返回当前容量。
System.out.println(stringBuffer01.capacity()); //输出为16
//3.char charAt(int index)
//返回 char在指定索引在这个序列值。
System.out.println(stringBuffer01.charAt(0)); //输出"H"
//4.StringBuffer delete(int start, int end)
//删除此序列的子字符串中的字符。 区间前闭后开。
System.out.println(stringBuffer02.delete(0, 2));//此时stringBuffer02为"3456"
//5.StringBuffer deleteCharAt(int index)
//删除 char在这个序列中的指定位置。
System.out.println(stringBuffer02.deleteCharAt(0)); //此时stringBuffer02为456
//6.int indexOf(String str)
//返回指定子字符串第一次出现的字符串内的索引。
System.out.println(stringBuffer01.indexOf("java"));//输出为5
//7.StringBuffer insert(int offset, String str)
//将字符串插入到此字符序列中。
System.out.println(stringBuffer02.insert(0, "123"));//此时stringBuffer02为123456
//8.int lastIndexOf(String str)
//返回指定子字符串最右边出现的字符串内的索引。
StringBuffer stringBuffer03 = new StringBuffer("12345123");
System.out.println(stringBuffer03);
System.out.println(stringBuffer03.lastIndexOf("123")); //输出5
//9.int length()
//返回长度(字符数)。
System.out.println(stringBuffer03.length()); //输出为8
//10.StringBuffer replace(int start, int end, String str)
//用指定的String中的字符替换此序列的子字符串中的 String。(前闭后开)
System.out.println(stringBuffer03.replace(5,8,"6789")); //此时stringBuffer03为"123456789"
//11.StringBuffer reverse()
//导致该字符序列被序列的相反代替。
System.out.println(stringBuffer03.reverse()); //此时stringBuffer03为987654321
//12.void setCharAt(int index, char ch)
//指定索引处的字符设置为 ch 。
stringBuffer03.setCharAt(0, 'x');
System.out.println(stringBuffer03); //此时stringBuffer03为"x87654321"
//13.void setLength(int newLength)
//设置字符序列的长度。
stringBuffer03.setLength(14);
//14.String substring(int start)
//返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。
System.out.println(stringBuffer03.substring(4)); //输出"54321"
//15.String substring(int start, int end)
//返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。(前闭后开)
System.out.println(stringBuffer03.substring(4,7)); //输出"543"
//16.String toString()
//返回表示此顺序中的数据的字符串。
String s = stringBuffer03.toString();
System.out.println(s); //s为"x87654321"
二、StringBuilder的构造方法。
//1.StringBuilder()
//构造一个没有字符的字符串构建器,初始容量为16个字符。
StringBuilder stringBuilder01 = new StringBuilder();
//2.StringBuilder(int capacity)
//构造一个没有字符的字符串构建器,由 capacity参数指定的初始容量。
StringBuilder stringBuilder02 = new StringBuilder(100);
//3.StringBuilder(String str)
//构造一个初始化为指定字符串内容的字符串构建器。容量在此基础上加16。
StringBuilder stringBuilder03= new StringBuilder("hello,world");
StringBuilder常用方法与StringBuffer大致相同。