一.StringBuffer类的概述
- StringBuffer类:线程安全的可变字符串序列
线程安全 —> 同步 —> 效率低
线程不安全 —> 不同步 —> 效率高 - String和StringBuffer,StringBulider的区别
共同点:
在内存中,始终返回的都是一个字符串类型
不同点:
后者,在内存中会构造一个字符串缓冲区,是一个可变的字符串序列;String一旦被赋值,其值不能再改变,是一个不可变的字符串序列
StringBuffer:线程安全,同步,效率低,用在多线程中使用
StringBulider:线程不安全,不同步,效率高,用在单线程中 - StringBuffer和数组的区别
都是一个容器:
数组:以存储多个元素,这多个元素必须保证数据类型一致
StringBuffer:在内存始终是一种数据类型,值都是字符串
形式参数的问题:
String类型作为形式参数和基本数据类型是一样的
StringBuffer作为形式参数和基本数据类型不一样
public class Demo7{
public static void main(String[] args) {
String s1 = "hello" ;
String s2 = "world" ;
s1 = s1 +"java" ;
System.out.println(s1);
System.out.println("s1:"+s1);
System.out.println("s2:"+s2);
change(s1,s2) ;
System.out.println("s1:"+s1);
System.out.println("s2:"+s2);
System.out.println("----------------------");
StringBuffer sb1 = new StringBuffer("hello") ;
StringBuffer sb2 = new StringBuffer("world") ;
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
change(sb1,sb2) ;
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
}
public static void change(StringBuffer sb1, StringBuffer sb2) {
sb1 = sb2 ;
sb2.append(sb1) ;
}
public static void change(String s1, String s2) {
s1 = s2 ;
s2 = s1 + s2 ;
}
}
结果:
hellojava
s1:hellojava
s2:world
s1:hellojava
s2:world
----------------------
sb1:hello
sb2:world
sb1:hello
sb2:worldworld
二.StringBuffer的常见方法
StringBuffer的构造方法和获取方法
public StringBuffer()
:构造一个字符串缓冲区,初始容量为 16 个字符public StringBuffer(int capacity)
:构造一个字符串缓冲区,指定容量public StringBuffer(String str)
:将str字符串创建到字符串缓冲区中,容量:str的长度+16public int length()
:获取字符串长度public int capacity()
:获取字符串缓冲区的容量大小
public class Demo1 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer();
System.out.println(s1.length());
System.out.println(s1.capacity());
System.out.println("--------------");
StringBuffer s2 = new StringBuffer(20);
System.out.println(s2.length());
System.out.println(s2.capacity());
System.out.println("--------------");
StringBuffer s3 = new StringBuffer("abc");
System.out.println(s3.length());
System.out.println(s3.capacity());
System.out.println("--------------");
String s = "hello" ;
}
}
结果:
0
16
--------------
0
20
--------------
3
19
-------------
StringBuffer的添加功能
public StringBuffer append(String str)
:表示在字符串缓冲追加,返回字符串缓冲区本身public StringBuffer insert(int offset,String str)
:在指定字符位置插入str这个字符串,返回缓冲区本身
public class Demo2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("hello");
sb.append("world");
System.out.println(sb);
sb.insert(2,"java");
System.out.println(sb);
}
}
结果:
helloworld
hejavalloworld
StringBuffer的删除功能
public StringBuffer deleteCharAt(int index)
:删除指定索引处的字符,返回的是字符串缓冲区本身public StringBuffer delete(int start,int end)
:删除从指定位置开始,到指定位置结束,返回字符串缓冲区本身
public class Demo3 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("helloworld");
sb.deleteCharAt(2);
System.out.println(sb);
sb.delete(3, 5);
System.out.println(sb);
}
}
结果:
heloworld
helorld
StringBuffer的替换功能
public StringBuffer replace(int start,int end,String str)
:从指定位置开始到指定位置结束进行替换,替换的内容为一个新的字符串,返回字符串缓冲区本身
public class Demo4 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("helloworld");
sb.replace(5, 9,"java");
System.out.println(sb);
}
}
结果:
hellojavad
StringBuffer的反转功能
public StringBuffer reverse()
:对字符串进行反转,是StringBuffer的特有功能,字符串String没有这个功能
public class Demo5 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("helloworld");
sb.reverse();
System.out.println(sb);
}
}
结果:
dlrowolleh
StringBuffer的截取功能
public String substring(int start)
:从指定位置开始截取到字符串末尾位置,返回新的字符串类型,而不是字符串缓冲区本身public String substring(int start,int end)
:从start位置开始,截取到end位置,包左不包右
public class Demo6 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("helloworldjava");
String a = sb.substring(2);
System.out.println(a);
String b = sb.substring(2,5);
System.out.println(b);
}
}
结果:
lloworldjava
llo