天天看点

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