缓冲(缓存)技术:由于String类底层实现是char[],数组一旦创建长度固定,不利于String类数据的增删改查操作,因此java提出缓存技术,在jvm虚拟机中开辟指定的缓存空间,完成对数据的操作,操作完之后再还给堆栈内存
对指定的内容重新定义;Java中重新构建一般是指将原有的多线程操作变为单线程操作
都是对String类的延伸(对功能进行拓展);StringBuffer类多线程操作,StringBuilder类单线程操作,是对StringBuffer类重新构建
// 定义格式
public final class StringBuffer{}
① 实例化对象
// 实例化对象并创建缓存区
public StringBuffer()
// 实例化对象,并将指定的String存储到缓存区
public StringBuffer(String value)
// 与String类中的同名方法可以参考StringAPI
② 增
// 将任意数据类型追加到缓存区末尾
public StringBuffer append(Object obj)
// 将任意的数据类型从指定的位置插入到缓存区中
public StringBuffer insert(int index,Object obj)
// 例子
public class Play {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("工作申请单");
sb.append("签字").append("wwsw");
sb.insert(0,"qqq");
System.err.println(sb.toString());
}
}
+:操作String类型
append方法:操作的是StringBuffer/StringBuilder类型
+:操作的是堆栈内存
append方法:操作的是缓存区
③ 删
// 删除字符串指定范围内的所有数据,其中包含start,不包含end
public StringBuffer delete(int start,int end)
// 删除指定位置上的元素
public StringBuffer deleCharAt(int index)
// 例子
public class Play{
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("工作申请单");
sb.delete(1,3);
System.err.println(sb.toString());
// 工请单
sb.deleteCharAt(2);
System.err.println(sb.toString());
//工请
}
}
④ 修改
// 用指定的String数据替换字符串中指定范围的数据,其中包含start不包含end
public StringBuffer replace(int start,int end,String value)
// 使用指定的字符替换原有位置上的字符
public void setCharAt(int index,char ch)
// 例子
public class Play{
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("工作申请单");
sb.replace(1,3,"qqww");
System.err.println(sb);
// 工qqww请单
sb.setCharAt(4,'!');
System.err.println(sb);
// 工qqw!请单
}
}
//定义格式
public final class StringBuilder{}
//常用API与StringBuffer类一致,详情参考StringBuffer类
// 科学计数法
public class Play {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.err.println("输入整数:");
// 通过包装类保证接受的数据为数字
Integer num=sc.nextInt();
// 科学计数法
StringBuilder sb=new StringBuilder(num.toString());
if(sb.length() >= 4){
for (int i = sb.length() - 3; i > 0; i-=3) {
sb.insert(i,',');
}
}
System.err.println(sb.toString());
}
}
① 三个的相同点:这三个类都是操作字符串类型的数据的类
② String StringBuffer相同点
都是多线程安全的操作(它实现了进程同步故安全);都出现在JDK1.0版本
③ StringBuffer和StringBuilder的相同点
都是可变字符串类;都操作的是缓存区
④ String是定长字符串,操作的是堆栈内存
⑤ StringBuilder是单线程操作快捷,出现版本是JDK5