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);
}
}