天天看點

javaSE17-- StringBuffer,StringBuilder

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