stringBuffer & StringBuilder
String
的字符串缓冲区
StringBuffer : 线程安全的
StringBuilder : 线程不安全的 效率高
与String 区别:
String 不可变 StringBuffer 可变
无参构造 :
构造一个缓冲区 默认16个字节的容量(capacity)
有参构造三个:
StringBuffer(int capacity) 指定容量 不常用
StringBuffer(String str) 直接接收字符串
StringBuffer(charsequence chs) 接收一个charsequence接口的子类对象
charsequence 接口 实现的子类有 String, StringBuffer, StringBuilder
public static void main(String[] arr) { StringBuffer sb1 = new StringBuffer(); System.out.println(sb1.capacity()); // 16 是默认容量 System.out.println(sb1.length()); // 0 是字符串长度 StringBuffer sb2 = new StringBuffer(10); System.out.println(sb2.length()); // 0 是字符串长度 System.out.println(sb2.capacity()); // 10 是指定的容量 StringBuffer sb3 = new StringBuffer("heima"); System.out.println(sb3.length()); //5 System.out.println(sb3.capacity()); // 21 }
append() : 添加功能 基本数据类型都能接收, 返回的是缓冲区本身
insert() : 插入 insert(index,value)
deleteCharAt(int index) : 删除指定位置
delete(int start,int end) : 删除一段 (取头不取尾),返回的是缓冲区本省
delete(0,sb.length) : 清空缓冲区
replace(start,end,newstr) 替换功能 替换指定部分
####反转 sb.reverse()#####
public static void main(String[] args) {
Scanner sc1 = new Scanner(System.in);
System.out.println("请输入字符串");
String s1 = sc1.nextLine();
StringBuffer sb1 = new StringBuffer(s1);
sb1.reverse();
System.out.println(sb1); // 默认调用toString()方法
}
subString(start,end) 切割 #### 返回的是一个String ####
String 和 StringBuffer 的转换:
String --> StringBuffer :
StringBuffer的构造、 append(str)
StringBuffer --> String:
toString()、 subString() 、 String的构造
当做参数传递时, String 看做常量 不改变值
StringBuffer 是引用数据类型 会改变值