java中的StringBuilder

本文详细介绍了StringBuffer和StringBuilder的特点及用法,包括创建、读取、更新、删除等操作,并对比了两者在线程同步方面的差异,为开发者选择合适的字符串缓冲类提供了指导。

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

/*
StringBuffer是字符串缓冲区。
特点:
1.是一个容器。而且长度时刻变化的。
2.可以直接操作多个数据类型。
3.最终会通过toString()方法变成字符串。
C create R read U update D delete

1.存储。
    StringBuffer append();将指定数据作为参数添加到已有数据的结尾处。
    StringBuffer insert(int offset,数据);可以将数据插入指定位置。
2.删除。
    StringBuffer delete(int start,int end);删除缓冲区中的数据,包含start,不包含end。
    StringBuffer deleteCharAt(int index);删除指定位置的元素。
3.获取。
    char charAt(int index);
    int indexOf(String str);
    int lastIndexOf(String str);
    int length();
    String substring(int start,int end);
4.修改。
    StringBuffer replace(int start,int end,String str);
    void setCharAt(int index,char ch);
5.反转。
    StringBuffer reverse();
6.将缓冲缓冲区中指定数据存储到指定字符数组中。
    void getChars(int srcBegin,int srcEnd,char[]dst,int dstBegin);
    --srcBegin:缓冲区开始位置,srcEnd:缓冲区结束位置,dst:字符数组,dstBegin:字符数组开始存储位置。


    JDK1.5版本之后出现了StringBuilder

    StringBuffer是线程同步。
    StringBuilder是线程不同步。

    以后开发,建议使用StringBuilder。
    升级三个因素:
    1.提高效率。
    2.书写方便。
    3.提高安全性。
*/

class  StringBufferDemo{
    public static void main(String[] args) {
        method_save();
        method_delete();
        method_update();
    }
    public static void method_save(){
        StringBuffer sb = new StringBuffer();
        //StringBuffer sb1 = sb.append(34);
        //show(sb.toString());//--34
        //show(sb1.toString());//--34
        //show("sb===sb1"+(sb==sb1));//--true

        sb.append("abc").append(true).append(34);
        sb.insert(1,"qq");
        show(sb.toString());

    }
    public static void method_delete(){
        StringBuffer sb = new StringBuffer("abcdef");
        sb.delete(1,3);
        show(sb.toString());//--adef

        //清空缓冲区
        //sb = new StringBuffer();--->指向新缓冲区--->败家
        sb.delete(0,sb.length());

        sb.deleteCharAt(2);//--abdef
    }
    public static void method_update(){
        StringBuffer sb = new StringBuffer("abcdef");
        sb.replace(1,4,"java");
        show(sb.toString());//--ajavaef

        sb.setCharAt(2,'k');
        show(sb.toString());//--abkdef
    }
    public static void show(Object obj){
        System.out.println(obj);
    }
}
### Java 中 `StringBuilder` 的使用方法及应用场景 #### 使用方法 `StringBuilder` 提供了一系列的方法来高效地构建和修改字符串。下面是一些常用的构造函数和方法: - **构造函数** - 默认构造函数:创建一个空的 `StringBuilder` 对象。 ```java StringBuilder sb = new StringBuilder(); ``` - 带有初始容量的构造函数:指定初始化容量大小。 ```java StringBuilder sb = new StringBuilder(16); ``` - 带有字符串参数的构造函数:基于给定字符串创建对象。 ```java StringBuilder sb = new StringBuilder("initial string"); ``` - **常用方法** | 方法名 | 描述 | | --- | --- | | append() | 将各种数据类型的值追加到序列末端并返回此对象本身以便链式调用[^2]。| | insert(int offset, ...)| 在指定位置插入字符、字符串或其他基本类型的数据。| | deleteCharAt(int index) | 删除位于索引处的一个字符。| | replace(int start, int end, String str) | 替换从start至end之间的子串为新的str。| 示例如下所示: ```java // 创建一个新的StringBuilder实例,并向其中添加内容 StringBuilder builder = new StringBuilder(); builder.append("Hello").append(' ').append("World!"); // 链式调用 System.out.println(builder.toString()); // 输出 "Hello World!" // 修改已有的StringBuilder实例的内容 builder.insert(5, ", dear"); // 在第5位之前加入", dear" System.out.println(builder.toString()); // 输出 "Hello, dear World!" ``` #### 应用场景 当涉及到大量的字符串连接操作时,尤其是在循环内部执行多次连接的情况下,应该优先选用 `StringBuilder` 而不是简单的 `+` 运算符或 `String.concat()` 函数。因为每次通过 `+` 或者 `.concat()` 来组合两个不可变的 `String` 实例都会创建额外的对象,从而影响性能;而 `StringBuilder` 则可以在同一个缓冲区上重复利用空间来进行更有效的内存管理[^4]。 另外,在多线程环境下应当注意的是,如果多个线程可能同时访问同一份共享资源,则应改用它的同步版本——即 `StringBuffer` 类型,因为它提供了更好的并发安全性支持[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值