StringBuffer
- StringBuffer是一个线程安全的可变字符序列,通俗的可以理解为一个容量可以变化的容器
- - 演示:
public static void main(String[] args) {
StringBuffer sb = new StringBuffer(10);//声明了一个容量为10的容器
StringBuffer sb2 = new StringBuffer("abcd");//声明了一个指定内容的容器
int cp = sb2.capacity();//返回sb2容器的理论长度
System.out.println(cp);//20
int length = sb2.length();//返回sb2的实际长度
System.out.println(length);//4
}
}
- StringBuffer的增删改功能
- 演示:
public class demo6 {
public static void main(String[] args) {
/**
* StringBuffer的增部分
*/
StringBuffer sb = new StringBuffer("abcd");//声明了一个指定内容的容器
System.out.println(sb);//abcd
//使用append方法在sb对象中加入数据
StringBuffer sb2 = sb.append("efg");
System.out.println(sb2);//abcdefg
//使用insert方法,在指定位置加入字符串
StringBuffer sb3 = sb2.insert(0, "java");//javaabcdefg
System.out.println(sb3);
/**
* StringBuffer的删部分
*/
//使用deleteCharAt方法删除指定位置的元素
StringBuffer sb4 = sb3.deleteCharAt(0);
System.out.println(sb4);//avaabcdefg
//使用delete方法删除指定范围的元素
StringBuffer sb5 = sb4.delete(0, 3);
System.out.println(sb5);//abcdefg,删除的时候含头不含尾
/**
* StringBuffer的修改部分
*/
StringBuffer sb6 = sb5.replace(0, sb5.length(), "hello");
System.out.println(sb6);//hello
StringBuffer re = sb6.reverse();//对字符串进行翻转
System.out.println(re);//olleh
String substring = re.substring(0, 2);
System.out.println(substring);//ol
//注意使用substring方法时返回的是String类型的值,不再是StringBuffer了。
}
}
StringBuffer和String的相互转换
- StringBuffer–>String
- 使用substring方法
- 使用构造方法
- 使用toString方法
- 演示:
public class Test1 {
public static void main(String[] args) {
/**
* StringBuffer-->String
*/
StringBuffer sb = new StringBuffer("abcdefg");
//通过自身的substring方法
String str = sb.substring(0);//把sb中的所有内容转为String类型
//通过toString方法
String str2 = sb.toString();
//通过String的构造方法
String str3 = new String(sb);
/**
* String-->StringBuffer
*/
String s="abcdefg";
//通过构造方法
StringBuffer sb2 = new StringBuffer(s);
//通过append方法
sb2 = sb2.append(s);
System.out.println(sb2);//abcdefgabcdefg
}
}
- 演示2:通过String和StringBuffer的相互转换实现字符串的反转
public class Reverse {
public static void main(String[] args) {
/**
* StringBuffer中有reverse方法可以将字符串反转
* 所以我们将string--StringBuffer,调用reverse方法后再反转回来
*/
String str="hello world";
StringBuffer sb = new StringBuffer(str);
String s = sb.reverse().toString();//先进行翻转,再转换为String类型的变量
System.out.println(s);
}
}
- StringBuffer和StringBuider的区别:
- StringBuffer的线程是安全的,但是频繁的加锁和释放锁导致其性能降低,速度不如StringBuider
- StringBuider的线程是不安全的,因此速度更快
- String和StringBuffer的值传递问题:
- 基本类型作为参数传递:值传递,形参得改变不影响实参 String 他符合值传递得特点
- 引用类型传递:引用传递,形参得改变会影响实参
- 演示:
public class Test2 {
public static void main(String[] args) {
String str = "hello";
test(str);
System.out.println(str); //hello
StringBuilder sb = new StringBuilder("哈哈");
test(sb);
System.out.println(sb); //呵呵哈哈
}
private static void test(StringBuilder sb) {
sb.append("呵呵").reverse();//呵呵哈哈
System.out.println(sb.toString()); //呵呵哈哈
}
private static void test(String s) {
s += "world";
System.out.println(s);//helloworld
}
}