Java——StringBuffer和StringBuilder

StringBuffer类和StringBuilder的区别

谈论起StringBuffer类和StringBuilder我们必须回顾下String类,是Java中基础且重要的类,并且String也是Immutable类的典型实现,被声明为final class,除了hash这个属性其它属性都声明为final,因为它的不可变性,所以例如拼接字符串时候会产生很多无用的中间对象,如果频繁的进行这样的操作对性能有所影响。故而引出了StringBuffer。
StringBuffer提供append和add方法,可以将字符串添加到已有序列的末尾或指定位置,它的本质是一个线程安全的可修改的字符序列,把所有修改数据的方法都加上了synchronized。但是保证了线程安全是需要性能的代价的。
很多情况下我们的字符串拼接操作不需要线程安全,这时候StringBuilder登场,StringBuilder和StringBuffer本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销。本质上两者的使用是没有区别,只是在开发安全性的问题上纠结和规范。

  • 简单总结
    StringBuffer是线程安全的效率低的
    StringBuilder是线程不安全的效率高的

StringBuffer的特点

  • 字符串一旦定义后,长度是不可变的。如果采用+号大量拼串,比较浪费空间。所以Java为了我们对字符拼接方便的进行操作,给我们提供了一个StringBuffer这个类。
  • 线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改,但通过某些方法可以改变该序列的长度和内容。

常用的构造方法

  • 空参构造
    public StringBuffer()
    //构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。
  • 有参构造
    public StringBuffer(String str)
    //构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

常用的方法


public int capacity() //获取容量的理论值

public int length()// 获取长度的实际值

public StringBuffer append(String str)
//可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身

public StringBuffer insert(int offset,String str) 
//在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

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

public StringBuffer replace(int start,int end,String str):
//从start开始到end用str替换

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

public int indexOf(String str) 
//返回第一次出现的指定子字符串在该字符串中的索引。
public int indexOf(String str, int fromIndex) 
//从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。

public StringBuffer reverse()
//字符串反转

发布了15 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Junzizhiai/article/details/102789441
今日推荐