StringBuilder和StringBuffer常用方法

本文详细介绍了Java中StringBuffer和StringBuilder的区别与用法,包括它们的特性、方法示例,如append、insert、delete、replace等操作,并强调了StringBuilder在非线程安全但高效的优势,推荐在单线程环境中使用。
package demo.api;

/*
* String 和 StringBuffer 区别:
1.StringBuffer没有重写equals方法
2.StringBuffer不能使用+
* */
class StringBuilderAndStringBuffer {
    public static void main(String[] args) {
//        StringBuffer sb = new StringBuffer();
        StringBuilder sb = new StringBuilder();

        StringBuilder sb2 = sb.append("java").append(3.14f);//返回StringBuilder
        sb.append(true);
        System.out.println("判断sb和sb2:" + (sb == sb2));
        System.out.println("StringBuilder的引用:" + sb2);

        System.out.println("append插入任意数据:" + sb);//java3.14true

        sb.insert(4, '0'); //返回StringBuilder
        System.out.println("insert插入位置数据:" + sb);//java03.14true
        sb.delete(4, 5);    //[...) 前闭后开    //返回StringBuilder
        System.out.println("delete删除区间数据:" + sb);//java3.14true
        sb.deleteCharAt(5);
        System.out.println("delete删除位置数据:" + sb);//java314true

        sb.setCharAt(0, 'J');//return void
        System.out.println("替换位置数据:" + sb);//Java314true
        sb.replace(0, 4, "php");    //[...) 前闭后开
        System.out.println("替换区间数据:" + sb);//php314true
        sb.reverse();
        System.out.println("反转全部数据:" + sb);//eurt413php
        sb.reverse();
        System.out.println("反转全部数据:" + sb);//php314true

        String str = sb.substring(0, 3);
        System.out.println("截取字符串:" + str);

        System.out.println("从2号位置查找字符串\"p\":" + sb.indexOf("p", 2));
        System.out.println("查找字符串最后一次出现位置\"p\":" + sb.lastIndexOf("p"));
        System.out.println("查看字符数组容量:" + sb.capacity());
        System.out.println("查看字符数组长度:" + sb.length());
        System.out.println("查看指定位置字符:" + sb.charAt(1))
        ;
        str = sb.toString();
        System.out.println("StringBuffer 转 String:" + str);

        //sb.setLength(0);
        sb.setLength(20);
        System.out.println("设置长度:" + sb.length());
        ;
        System.out.println(sb);

        System.out.println("清空缓冲区:" + sb.delete(0, sb.length()));
    }
}
/*StringBuffer:就是字符串缓冲区。
 * 用于存储数据的容器。
 * 特点:
 * 1,长度的可变的。
 * 2,可以存储不同类型数据。
 * 3,最终要转成字符串进行使用。
 * 4,可以对字符串进行修改。
 * */
/*
StringBuffer 与 StringBuilder的相同处与不同处:

	相同点:
		1. 两个类都是字符串缓冲类。
		2. 两个类的方法都是一致的。
	不同点:
		1. StringBuffer是线程安全的,操作效率低 ,StringBuilder是线程非安全的,操作效率高。
		2. StringBuffer是jdk1.0出现 的,StringBuilder 是jdk1.5的时候出现的。

推荐使用: StringBuilder,因为操作效率高。
*/
### StringBuilder StringBuffer 的区别 在 Java 中,`StringBuilder` `StringBuffer` 都是用于处理可变字符串的类。尽管它们的功能相似,但在性能线程安全性方面存在显著差异。 #### 线程安全性 `StringBuffer` 是线程安全的,其方法通过同步机制确保在多线程环境下不会发生数据竞争[^1]。相比之下,`StringBuilder` 并不提供线程安全保证,因此在单线程环境中表现出更高的性能[^1]。 #### 性能比较 由于 `StringBuffer` 的方法被标记为 `synchronized`,这使得它在多线程环境下的安全性得以保障,但也因此带来了额外的开销[^2]。而在单线程环境中,`StringBuilder` 的性能通常优于 `StringBuffer`,因为它避免了同步操作带来的开销[^3]。 #### 常用方法 两者都继承自 `AbstractStringBuilder`,因此提供了许多相同的方法,例如 `append()`、`insert()`、`delete()` `reverse()` 等[^3]。以下是一个使用 `reverse()` 方法的示例: ```java String original = "abcdefg"; String reversed = new StringBuilder(original).reverse().toString(); System.out.println(reversed); // 输出:gfedcba ``` #### 内存管理 与 `String` 不同,`StringBuilder` `StringBuffer` 在进行字符串拼接时不会创建新的对象,而是直接修改原有的字符序列[^5]。这种特性使得它们在需要频繁修改字符串内容的场景中表现更优。 --- ### 示例代码对比 以下是 `StringBuilder` `StringBuffer` 的简单对比示例: ```java // 使用 StringBuilder StringBuilder sb = new StringBuilder("Hello"); sb.append(" World"); System.out.println(sb.toString()); // 输出:Hello World // 使用 StringBuffer StringBuffer sf = new StringBuffer("Hello"); sf.append(" World"); System.out.println(sf.toString()); // 输出:Hello World ``` 虽然两者的使用方式几乎完全相同,但选择哪一个取决于具体的应用场景。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值