概述:
线程安全的可变字符序列。一个类似于String的字符缓冲区,但不能修改,虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
线程安全效率低
StringBuffer和string的区别
String不可变字符序列
StringBuffer可变字符序列
StringBuffer的构造方法
public StringBuffer() {} //无参构造
public StringBuffer(int capacity){} //有参构造
public StringBuffer(CharSequence seq)
public StringBuffer(String str)
public class demo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer sb = new StringBuffer();
System.out.println(sb.capacity()); //16,初始容量,理论值
System.out.println(sb.length()); //0,容器中的字符数,实际值
StringBuffer sb1 = new StringBuffer(10);
System.out.println(sb1.capacity()); //给定值
System.out.println(sb1.length()); //0
StringBuffer sb2 =new StringBuffer("love");
System.out.println(sb2.capacity()); //20,16+4字符串的length+初始容量
System.out.println(sb2.length()); //4
}
}
StingBuffer的添加功能
public StringBuffer append(String str) ;
//可以把任意类型的数据添加到字符串的缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str)
//在指定位置把任意类型的数据插入到字符串缓冲区里面
StringBuffer是一个字符串缓冲区,当new时是在堆内存创建了一个对象,底层是一个长度为16的字符数组,当调用添加方法时,不会再重新创建对象,不断向原缓冲区添加字符
public class demo2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
StringBuffer sb1 = sb.append(false);
StringBuffer ab2 = sb.append("love");
StringBuffer sb2 = ab2.append(123);
System.out.println(sb.toString());
System.out.println(sb1.toString());
System.out.println(ab2.toString());
System.out.println(sb2.toString());
StringBuffer sb3 = sb.insert(1,"w");
System.out.println(sb3);
}
}
StringBuffer的删除功能
public StringBuffer deletCharAt(int index) //删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end);//删除从指定位置开始指定位置结束的内容,并返回本身
public class demo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer sb = new StringBuffer("loveyou");
StringBuffer sb1 = sb.deleteCharAt(2);
System.out.println(sb1);
StringBuffer sb2 = sb.delete(4,6); //删除的时候含头不含尾
System.out.println(sb2);
}
}
运行结果:
StringBuffer的替换和反转功能
public StringBuffer replace(int start,int end,String str) //从start开始到end结束用str替换
public StringBuffer reverse() //字符串反转
public class demo4 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("chanyeol");
StringBuffer sb1 = sb.replace(1, 3,"a");
System.out.println(sb1);
StringBuffer sb2 =sb1.reverse();
System.out.println(sb2);
}
}
运行结果
StringBuffer的截取功能以及注意事项
public String substring(int start) //从指定位置截取到末尾
public String substring(int start,int end) //从指定位置开始到结束位置,不包含结束位置
StringBuffer和String的相互转换
String——StringBuffer
通过构造方法,append方法
StringBuffer——String
通过构造方法,通过toString(),subString(0,length())
public class demo5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer sb = new StringBuffer("chanyeol");
System.out.println(sb);
StringBuffer sb1 = new StringBuffer("ghj");
sb1.append("love");
System.out.println(sb1);
StringBuffer sb2 = new StringBuffer("aaaa");
String s1 = new String(sb2);
System.out.println(s1);
System.out.println(sb.toString());
String s2 = sb2.substring(0,4);
System.out.println(s2);
}
}
运行结果:
StringBuffer和StringBuilder分别作为参数传递
基本数据类型的值传递:不改变其值
引用数据类型的值传递,改变其值
String虽然是引用数据类型但是当作参数传递时和基本数据类型是一样的