1 StringBuffer
1.1 StringBuffer相关特征
-
StringBuffer代表可变的字符序列,可以对字符串内容进行增删
-
StringBuffer是一个容器,方法与String基本相同,但是可变长度的
-
StringBuffer的直接父类是AbstractStringBuilder,实现了Serializable接口,可以序列化。在父类中有属性 char[] value,不是final的,用value来存放字符串内容,存放在堆中。所以变化(增加/删除)不用每次都更换地址(即不是每次创建新对象),所以效率高于String
-
StringBuffer是final类,不能被继承。
1.2 String和StringBuffer相互转换
public class StringBufferBaseMethod {
public static void main(String[] args) {
//String --> StringBuffer
String name = "yorick";
//1.构造函数传入String类型数据,返回StringBuffer类型数据
StringBuffer sb1 = new StringBuffer(name);
System.out.println(sb1);
//2.使用append方法
StringBuffer sb2 = new StringBuffer();
sb2.append(name);
System.out.println(sb2);
//StringBuffer ---> String
StringBuffer sb3 = new StringBuffer("hello world");
//1.使用StringBuffer提供的toString方法
String str1 = sb3.toString();
System.out.println(str1);
//2.使用String的构造方法
String str2 = new String(sb3);
System.out.println(str2);
}
}
1.3 StringBuffer常见方法
public class StringBufferBaseMethod {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("hello");
//1.增
sb.append(",");
sb.append("world").append("!");
System.out.println(sb);
//2.删 [start,end)
sb.delete(0,5);
System.out.println(sb);
//3.替换 [start,end)
sb.replace(1,6,"yorick");
System.out.println(sb);
//4.查找子串第一次出现的索引,找不到返回-1
int index = sb.indexOf("yorick");
System.out.println(index);
//5.插入
sb.insert(0,"hello");
System.out.println(sb);
//6.长度
System.out.println(sb.length());
}
}
2 StringBuilder
2.1 StringBuilder相关特征
-
可变的字符序列,停规和StringBuffer兼容的API,但是不保证同步,用在字符串缓冲区被单个线程使用的时候,比StringBuffer效率高
-
StringBuilder 继承 AbstractStringBuilder 类,实现了Serialzable接口,可以被序列化,实现网络传输或者保存至文件。StringBuilder是final类,不能被继承
3 String、StringBuffer和StringBuilder比较
- StringBuilder和StringBuffer类似,均代表可变的字符序列,而且方法也一样
- String是不可变字符序列,效率低,但是复用率高
- StringBuffer是可变字符序列,效率较高,线程安全
- StringBuilder是可变字符序列,效率最高,线程不安全
网友评论