String Stringbuffer和Stringbuilder的区别以及其内容清除

博客介绍了Java中String、StringBuffer和StringBuilder的区别。String创建的是字符串常量,无法改变;StringBuffer和StringBuilder可改变字符串长度,且StringBuffer效率较StringBuilder慢。清除StringBuffer和StringBuilder内容可重新创建变量,而String改变也是重新创建。

这三者在工作中一般都涉及到,以及在一些Java基础面试中也会经常提到

区别如下:

1.String 创建的是字符串常量 无法改变字符串 后二者皆可以改变字符串的长度。

2.如果程序经常需要进行字符串的变化,后面二者速率比String快,但是创建字符串的速度没有String快。
3.StringBuffer是线程同步的后者不是线程同步的,所以多线程下选用StringBuffer 单线程选用StringBuilder,

也是因此,StringBuffer效率较StringBuilder慢。


对于StringBuffer,StringBuilder,需要清除其中的内容的话可以使用

仅对其中一种举例:
StringBuffer sb = new StringBuffer();
1.StringBuffer.setLength(0);
2.StringBuffer.delete(0,sb.length());

3.StringBuffer sb = new StringBuffer();//重新创建一个变量

至于String,本来就是字符串常量了,改变也是重新创建。

### Java 中 `StringBuffer` `StringBuilder` 的扩容机制 当向 `StringBuffer` 或 `StringBuilder` 对象追加数据时,如果现有容量不足以容纳新的字符序列,则会触发扩容操作。扩容过程涉及创建一个新的更大的数组来存储更多的字符。 #### 容量计算方式 对于这两种类,在执行扩容时都会遵循相似的原则: - 当前容量不足时,默认情况下新容量将是旧容量的两倍加上2个单位[^5]。 ```java // 计算新容量大小 int newCapacity = (oldCapacity << 1) + 2; ``` 这种策略可以减少频繁分配内存带来的开销,并且能够有效地利用空间。 #### 扩容的具体实现细节 具体到源码层面,无论是 `StringBuffer` 还是 `StringBuilder` 都依赖于其父类 `AbstractStringBuilder` 来完成实际的扩容逻辑[^2]。以下是简化版的扩容流程说明: 1. **判断是否需要扩容** 如果当前缓冲区长度小于所需最小容量,则进入下一步; 2. **确定目标容量** 新的目标容量等于原容量乘以二再加二,除非指定了更具体的增长规则; 3. **重新分配内存并复制原有内容** 创建一个更大尺寸的新字符数组并将原来的数据拷贝过去; 4. **更新对象状态** 将引用指向新的大数组,并调整内部变量反映最新的情况。 通过这种方式,即使不断添加更多字符也不会轻易遇到性能瓶颈问题。 #### 实际案例分析 考虑下面的例子,展示了如何动态改变 `StringBuilder` 的内容及其背后的自动扩容行为[^4]: ```java public class Method_EX { public static void main(String[] args) { // 初始化 StringBuilder 并设置初始值 "12345" StringBuilder sb = new StringBuilder("12345"); // 输出原始字符串 System.out.println("当前字符串 = " + sb); // 反转字符串顺序 sb.reverse(); System.out.println("颠倒后的字符串 = " + sb); // 向末尾追加多个不同类型的内容 sb.append(123).append("哈哈哈").append(666.666f).append("牛逼!"); System.out.println("增加后的字符串 = " + sb); // 清除所有字符 sb.delete(0, sb.length()); System.out.println("全部删光光!当前字符串 = " + sb); } } ``` 在这个例子中,随着连续调用 `append()` 方法,每当超出当前可用的空间限制就会发生一次隐式的扩容动作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值