黑马程序员:Java基础——StringBuffer与StringBuilder

本文详细介绍了JavaEE中的StringBuffer和StringBuilder的概念、特点、方法以及使用示例,包括存储、删除、获取、修改和反转等功能,并对比了两者之间的异同,最后讨论了JDK升级对性能、书写和安全性的提升。

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

------- Java EE培训java培训、期待与您交流! ----------

1.StringBuffer概念

    StringBuffer是字符串缓冲区,是一个容器。

2.StringBuffer的特点

    1.长度是可变化的。
    2.可以字节操作多个数据类型。
    3.最终会通过toString方法变成字符串。

3.StringBuffer的方法

    3.1、存储
        StringBuffer append():将指定的数据作为参数添加到已有的数据

            可以看到除short,byte外,append方法支持大多数类型。
        StringBuffer insert(index,str):可以将数据插入到指定index位置。

            insert方法支持同append方法。
    3.2、删除
        StringBuffer delete(start,end):删除缓冲区中的数据,前闭后开区间
        StringBuffer deleteCharAt():删除指定位置的字符。
    3.3、获取
        char charAt(int index):返回此序列中指定索引处的 char 值。

        int indexOf(String str):返回第一次出现的指定子字符串在该字符串中的索引。
        int lastIndexOf(String str): 返回最右边出现的指定子字符串在此字符串中的索引。
        int length():返回长度(字符数)。
        String substring(int start,int end): 返回一个新的 String,它包含此序列当前所包含的字符子序列。

        需要注意的是,获取返回的不再是StringBuffer容器,所以获取方法不可以串联着写。
    3.4、修改
        StringBuffer replace(int start,int end,String str)
        void setCharAt(int index,char ch)
    3.5、反转
        StringBuffer reverse()
    3.6、
        将缓冲区中指定数据存储到指定的字符数组中
        getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
        传值变量解析:StringBuffer获取开始位,结束位,要存到的字符数组,从字符数组的指定角标号开始

特别:由于有很多方法返回类型是StringBuffer,所以可以串联着写,例如:

sBuffer.append("abc").append(false).append(123).insert(3, 141).replace(2,7,"true").reverse();

4.StringBuffer的代码示例

    以下是上文全部方法代码示例:

public class StringBufferTest {
    public static void main(String[] args) {
		bufferAdd();
		bufferDel();
		bufferUpd();
		getCharDemo();
	}
    
    public static void bufferAdd(){
    	StringBuffer sBuffer = new StringBuffer();
		sBuffer.append("abc").append(false).append(123);
		sBuffer.insert(3, 141);
		sop(sBuffer.toString());
    }
    
    public static void bufferDel(){
    	StringBuffer sBuffer = new StringBuffer("My name is Jarry!");
    	sBuffer.delete(2, 5);
		sBuffer.deleteCharAt(2);
		//sBuffer.delete(0, sBuffer.length());
		sop(sBuffer.toString());
		//sop("删掉了");
    }
    
    public static void bufferUpd(){
    	StringBuffer sBuffer = new StringBuffer("Hello Java!");
    	sBuffer.replace(2,7,"true");
    	sBuffer.reverse();
    	sop(sBuffer.toString());
    }
    
    public static void getCharDemo(){
    	StringBuffer sBuffer = new StringBuffer("abcdefghi");
    	char [] chs = new char[sBuffer.length()];
    	sBuffer.getChars(3, 7, chs, 2);
    	for(int i = 0;i<chs.length;i++){
    		sop("chs["+i+"]"+chs[i]+";");
    	}
    }
    
    public static void sop(String str){
    	System.out.println(str);
    }
}

关于使用测试:建议自己手写或直接COPY到EditPlus中然后一步一步加注释看运行效果。

这是以上的代码运行效果:

5.StringBuilder的概念

     JDK1.5版本之后出现了StringBuilder。

     一个可变的字符序列。此类提供一个与StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer 要快。

6.StringBuilder与StringBuffer的异同

    异:

      StringBuilder是线程同步
      StringBuilder是线程不同步

      将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 Stringbuilder

    同:

      StringBuilde的方法与StringBuffer是相同的。

7.扩展:JDK升级的三个因素

   1.提高效率
   2.简化书写
   3.提高安全性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值