StringBuffer,StringBuilder
概述
- String 值不可变 常量
- StringBuffer 值可变 多线程安全 效率低
- StringBuilder 值可变 多线程不安全 效率高
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
StringBuffer
,
StringBuilder
上的主要操作是
append
和
insert
方法可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
append
方法始终将这些字符添加到缓冲区的末端;而
insert
方法则在指定的点添加字符。
将
StringBuilder
的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用
StringBuffer
。
StringBuilder/StringBuffer
- 可变的字符串 , 适用于频繁进行字符串连接
- 最常用的方法: append()
- StringBuffer是线程安全的, StringBuilder不是线程安全的
- StringBuilder/StringBuffer默认初始化容量: 16
- 默认扩容: newCapacity = value.length * 2 + 2
s2.append(1);//向末尾添加,不会创建新的,
能有效地将给定的数据转换成字符串,
StringBuffer
StringBuffer s2 = new StringBuffer("abc");
s2.append(1);//向末尾添加,不会创建新的
append向末尾添加字符串,不会创建新的StringBuffer对象
insert向指定位置插入一个字符串
StringBuffer
s2.append("asdasd");
s2.insert(0, "nihao");
System.out.println(s2);
deleteCharAt(1);//删除指定位置
delete(0, 4)//删除区间的 左开右闭
s2.deleteCharAt(1);//删除指定位置
System.out.println(s2);
s2.delete(0, 4);//删除区间的 左开右闭
System.out.println(s2);
替换功能左开右闭
s2.replace(0, 4, "tttt");
System.out.println(s2);
s2.reverse();
System.out.println(s2);
String s3 = s2.substring(0, 4);
System.out.println(s3);
package day4;
public class StringBufferDemo {
public static void main(String[] args) {
/*
String 值不可变 常量
StringBuffer 值可变 多线程安全
StringBuilder 值可变 多线程不安全
多次字符串拼接 使用 StringBuffer StringBuilder
*/
StringBuffer s1 = new StringBuffer();//默认长度位16
StringBuffer s2 = new StringBuffer("abc");
s2.append(1);//向末尾添加,不会创建新的
s2.append("asdasd");
s2.insert(0, "nihao");
System.out.println(s2);
s2.deleteCharAt(1);//删除指定位置
System.out.println(s2);
s2.delete(0, 4);//删除区间的 左开右闭
System.out.println(s2);
//替换功能左开右闭
s2.replace(0, 4, "tttt");
System.out.println(s2);
s2.reverse();
System.out.println(s2);
//返回值类型是String类型,本身没有发生改变
//必须赋值给新的字符串
String s3 = s2.substring(0, 4);
System.out.println(s3);
}
}