Java之StringBuilder(StringBuffer)

本文介绍了Java中的StringBuilder类,包括其在StringBuffer包下的作用、构造方法(如无参、指定容量和初始化字符串),以及常用的append、reverse和length方法。同时,对比了StringBuilder与StringBuffer在线程安全性和适用场景上的差异。
摘要由CSDN通过智能技术生成


提示

StringBuilder类依旧按照之前String类的五步走:

  1. 先介绍StringBuilder的所属包
  2. 介绍StringBuilder的作用
  3. 介绍StringBuilder的字段摘要
  4. 介绍StringBuilder的构造方法
  5. 介绍StringBuilder的方法

一、什么是StringBuilder

StringBuilder属于java.lang.StringBuffder包下,也就是使用的时候不用导包。
StringBuilder是线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

例如,如果 z 引用一个当前内容为 “start” 的字符串缓冲区对象,则此方法调用 z.append(“le”) 会使字符串缓冲区包含 “startle”,而 z.insert(4, “le”) 将更改字符串缓冲区,使之包含 “starlet”。

通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。

当发生与源序列有关的操作(如源序列中的追加或插入操作)时,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步。

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

二、 StringBuilder的构造方法

常用的构造方法

1.StringBuffer()

      构造一个无参对象

2.StringBuffer(int capacity)

      构造一个不带字符,但具有指定初始容量的字符串缓冲区。 

3.StringBuffer(String str)

      构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。 

三、 StringBuilder 的常用方法

1.append(任意类型的参数) 追加字符串序列

apend()中的参数可以是任意类型;比如:bool,int,double,float,char,char[ ]。。

案例:

        StringBuilder sb  = new StringBuilder();
        //1.在字符串后面追加字符序列     
           StringBuilder sbs = sb.append(123).append('a').append(12.34).append("sb");
           System.out.println(sbs);//结果123a12.34sb
        
  • 输出结果:123a12.34sb
  • 这里使用了链式编程。链式编程就是如果调用一个方法后结果仍然是一个对象,那么就可以接着调用返回结果类型的方法;
  • 上述案例中调用append()后的结果仍然为StringBuilder类型的对象,所以可以接着调用StringBuilder类中的方法。

2.reverse() 反转字符串

案例

        StringBuilder sb  = new StringBuilder("123a12.34sb");
        //2.字符串反转字符串
       StringBuilder sbs =  sb.reverse() ;  
       System.out.println(sbs);//结果为:bs43.21a321

3.length() //返回字符串的个数

        StringBuilder sb  = new StringBuilder("123");
        //3.返回字符串的个数
           StringBuilder sbs = sb.legth();
           System.out.println(sbs);//结果 3

四、 StringBuffer

1.与StringBuilder区别

相同点:

  • StringBuffer与StringBuilder的构造方法,方法是一样的。也就是StringBuilder所有的方法StringBuilder也可以用。

不同点:

  • StringBuffer是线程安全的可变字符序列。StringBuilder是线程不安全的。
  • StringBuffer用于多线程,StringBuilder用于单线程。
  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值