StringBuffer (字符串缓冲对象)
概念:用于表示可以修改的字符串,称为字符串缓冲对象
作用:使用运算符的字符串将自动创建字符串缓冲对象
例如: str1+str2的操作,实际上是把str1与str2都创建成StringBuffer类对象
构造方法:详见API
StringBuffer():创建一个空的StringBuffer对象,默认保留16个字符的缓冲空间
StringBuffer(String str):根据字符串str的内容创建StringBuffer对象,并默认保留 16 个字符的缓冲空间
StringBuffer(int capacity):创建一个空的StringBuffer对象,缓冲空间大小由capacity指定
方法:前面是返回值 + 方法
StringBuffer insert(int index, 数据值):将x插入到索引为index的位置,数据值可以为任何类型的数据
StringBuffer append(类型 数据):将类型的参数以字符串的表示形式追加到序列
int length():获得当前StringBuffer对象的长度
void setCharAt(int index, char ch):使用 ch 指定的新值替换 index指定的位置上的字符
String toString():转换为字符串形式
StringBuffer reverse():将当前StringBuffer对象中的字符序列倒置
StringBuffer delete(int start, int end):删除当前对象中从start位置开始直到 end 指定的索引位置的字符序列
StringBuffer deleteCharAt(int index):将删除 index 指定的索引处的字符
StringBuffer replace(int start, int end, String str):使用一组字符替换另一组字符,从 start位置开始替换,直到end位置结束
特点:Java中一旦创建了字符串就不能直接更改,这就是字符String的不变性
StringBuffer类正是针对此问题而提供的字符可变序列;和String类的最大区别就是可以更改
StringBuilder
概念:JDK1.5以后提供的新的字符缓冲区
作用:StringBuffer一样
区别: StringBuffer StringBuilder
线程是否安全 安全 不安全
效率 相对低 相对高
代码示例
1 package summary2; 2 3 //字符缓冲区 4 public class StringBufferClass 5 { 6 static void StringBuffer() 7 { 8 String s = "StringBuffer"; 9 StringBuffer sb = new StringBuffer(s); //根据指定字符串创建StringBuffer对象 10 sb.replace(6,12,""); //根据下标替换Buffer为空、得到String 11 String str = sb.toString(); //将sb类转换成字符串str 12 for (int i=0;i<200000;i++) //为测试效率循环添加数据 13 { 14 sb.append(str); //序列最后面添加对象str 15 sb.insert(0,str); //在下标0的位置插入str 16 } 17 } 18 static void StringBuilder() //创建StringBuilder方法、方法体和StringBuffer相同 19 { 20 String s = "StringBuffer"; 21 StringBuilder sb = new StringBuilder(s); 22 sb.replace(6,12,""); 23 String str = sb.toString(); 24 for (int i=0;i<200000;i++) 25 { 26 sb.append(str); 27 sb.insert(0,str); 28 } 29 } 30 public static void main(String[] args) 31 { 32 long startTime1 = System.currentTimeMillis(); //获取开始时间、精度位纳秒 33 StringBuffer(); //调用StringBuffer() 34 long endTime1 = System.currentTimeMillis(); //获取结束时间、精度位纳秒 35 System.out.println("StringBuffer运行时间:"+(endTime1-startTime1)+"ms"); 36 long startTime2 = System.currentTimeMillis(); //获取开始时间、精度位纳秒 37 StringBuilder(); //调用StringBuilder() 38 long endTime2 = System.currentTimeMillis(); //获取结束时间、精度位纳秒 39 System.out.println("StringBuilder运行时间:"+(endTime2-startTime2)+"ms"); 40 } 41 }
浙公网安备 33010602011771号