java语言基础(十四:StringBuffer类)

这篇博客详细介绍了Java中的StringBuffer类,包括其线程安全的特性、构造方法、添加、删除、替换、反转等功能,以及与String和StringBuilder的区别。此外,还提到了StringBuffer在参数传递中的行为以及StringJoiner的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StringBuffer类的概述

我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。
    而StringBuffer就可以解决这个问题
    线程安全的可变字符序列

StringBuffer类的构造方法

public StringBuffer():                无参构造方法
    public StringBuffer(int capacity):    指定容量的字符串缓冲区对象
     public StringBuffer(String str):        指定字符串内容的字符串缓冲区对象
    B:StringBuffer的方法:
        public int capacity():返回当前容量。    理论值
        public int length():返回长度(字符数)。 实际值

StringBuffer的添加功能

public StringBuffer append(String str):            

               可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身

public StringBuffer insert(int offset,String str):

               在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

StringBuffer的删除功能

    public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
    public StringBuffer delete(int start,int end): 删除从指定位置开始指定位置结束的内容,并返回本身

StringBuffer的替换和反转功能

A:StringBuffer的替换功能
    public StringBuffer replace(int start,int end,String str):    从start开始到end用str替换
B:StringBuffer的反转功能
    public StringBuffer reverse():                            字符串反转

 从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
          int indexOf (String str)  
 从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
          int indexOf (String str,int fromIndex)    
 
  从后往前找
   int lastIndexOf (String str)
     
   int lastIndexOf (String str,int fromIndex) 

StringBuffer的截取功能及注意事项

        public String substring(int start):            从指定位置截取到末尾
        public String substring(int start,int end):    截取从指定位置开始到结束位置,包括开始位置,不包括结束位置

        注意:返回值类型不再是StringBuffer本身

StringBuffer和String的相互转换

A:String -- StringBuffer
            a:通过构造方法
            b:通过append()方法
B:StringBuffer -- String
            a: 使用substring方法
            b:通过构造方法
            c:通过toString()方法

StringBuffer和StringBuilder的区别

stringbuffer和stringbuilder的区别在于:线程安全不同、缓冲区不同、性能不同。StringBuffer 适用于用在多线程操作同一个 StringBuffer 的场景,

如果是单线程场合 StringBuilder 更适合。

1.线程安全

StringBuffer:线程安全,StringBuilder:线程不安全。因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 synchronized 修饰。

2.缓冲区

StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。

StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。

所以, StringBuffer 对缓存区优化,不过 StringBuffer 的这个toString 方法仍然是同步的。

3.性能

既然 StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。

String和StringBuffer分别作为参数传递

         String作为参数传递 String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递,String类型属于值传递
         StringBuffer作为参数传递 

StringJoiner

StringJoiner(CharSequence delimiter) 
构建了一个字符容器,指定分隔符 

StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) 
构建了一个字符容器,指定分隔符,前缀,后缀

StringJoiner add(CharSequence newElement) 
增加了一份给 CharSequence值的 StringJoiner价值的下一个元素。  
int length() 
返回该 StringJoiner的 String表示长度。 

String toString()  把容器中的数据以字符串返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值