1、 StringBuffer:线程程安全的可变字符序列
1)线程
2)线程的安全问题,是难点(多线程属于难点) 多线程------>解决了多线程安全问题------>是死锁 :生产消费模式(Java中等待唤醒机制)
3) 线程安全 --->同步的---->执行效率低
举例:
银行的网站,医疗平台...
4)线程不安全---->不同步---->执行效率高
举例:
新闻网站,XXX论坛...
5) StringBuffer和String的区别?
前者是一个可变的字符序列,后者是不可变的字符序列
如果从内存角度考虑,String定义的时候,会在常量池中开辟空间,比较耗费内存
而StringBuffer,字符串缓冲区(里面存储的全部都是字符串),它会释放掉
6)StringBuffer的构造方法:
StringBuffer() :无参构造的形式,初始容量16
StringBuffer(int capacity) :指定容量构造一个字符串缓冲区
StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容
例如:
StringBuffer s = new StringBuffer("helloworld");
System.out.println(s.length());输出结果为10
System.out.println(s.capacity());输出结果为:26
}
7) StringBuffer的获取功能:
public int length()返回长度
public int capacity()返回当前容量 (如果超过容量,系统自动分配(存储字符串的时候,英文的))
2、StringBuffer的添加功能
public StringBuffer append(String/boolean....) :在字符串缓冲区中追加数据(在末尾追加),并且返回字符串缓冲区本身
例如:
StringBuffer s1 = new StringBuffer(“hello”);
System.out.print(s1.append("world"));
输出结果为:helloworld
public StringBuffer insert(int offset,String str):将当前str字符串添加到指定位置处,它返回字符串缓冲区本身
System.out.println(s1.insert(1,"ll"));
输出结果为:hllello
3、SringBuffer的删除功能
1)public StringBuffer deleteCharAt(int index):移除指定位置处的字符..
StringBuffer S2 = new S2(Javase);
System.out.println(S2.deleatCharAt(4));
输出结果为:Javae
2)public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...
System.out.println(S2.delete(3,5));
输出结果为:Jav
4、StringBuffer的反转功能
public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身
例如:
StringBuffer S3 = new StringBuffer("he");
System.out.println(S3.reverse());
输出结果为:eh
5、StringBuffer的截取功能
1)public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串
StringBuffer s4 = new StringBuffer("loveapple");
System.out.println(s4.substring(4));
输出结果为:apple
2)public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串
System.out.println(s4.substring(4,8));
输出结果为:appl
6、StringBuffer的替换功能
public StringBuffer replace(int start,int end,String str)
从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身
System.out.println(s4.replace(4,9,"food"));
输出结果为;lovefood
7、String 和StringBuffer之间的相互转换
例如:
String sc = "happy";
第一种:
StringBuffer sd = new StringBuffer(sc);
Systen.out.println(sd);
输出结果为:happy
第二种:
StringBuffer sf = new StringBuffer();
sf.append(sc);
System.out.println(sf);
输出结果为:happy
8、StringBuffer和StringBulder的区别
1)StringBuffer
线程安全的可变字符序列。一个类似于 String
的字符串缓冲区,但不能
修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可
以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此
任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线
程进行的方法调用顺序一致
2)StringBulder
一个可变的字符序列。此类提供一个与 StringBuffer
兼容的 API,但不保证同
步。该类被设计用作 StringBuffer
的一个简易替换,用在字符串缓冲区被单个线
程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数
实现中,它比 StringBuffer
要快。