Java StringBuffer类与StringBuilder类总结(方法清单/面试题)短小精悍

47 篇文章 0 订阅
本文详细探讨了StringBuilder和StringBuffer的区别,包括它们的可变性、性能效率以及线程安全性。StringBuilder在内存管理上通过动态扩容提供高效字符串操作,而StringBuffer通过synchronized关键字确保线程安全,适合多线程环境。了解这些概念有助于优化Java代码的性能和并发处理。
摘要由CSDN通过智能技术生成

目录

常见疑问

为什么说StringBuilder是一个可变的字符序列?

为什么说StringBuilder/StringBuffer效率比String高?

为什么说StringBuilder是线程不安全的 StringBuffer是线程安全的?

方法清单

StringBuilder方法

StringBuffer方法

常见疑问

为什么说StringBuilder是一个可变的字符序列?

StringBuilder被实例化的话会预先分配一个长度为16的char数组

如果新增字符的的话会判断新增字符的长度与源字符串的长度并与源长度比较只有比源长度大时才会去扩容,然后新建数组,并将新建的数组复制至全局char[]

从而实现可变扩容

为什么说StringBuilder/StringBuffer效率比String高?

因为StringBuffer/Builder是动态扩容的不需要每次都new 新的对象,但是String是静态扩容的(初始化时便固定了数组的长度16),每次增加扩容都需要new 一个新的对象,同时变换指针的位置(老-》新的)

为什么说StringBuilder是线程不安全的 StringBuffer是线程安全的?

因为StringBuffer是使用了synchronized关键字,保证了同一时间只能有一个线程访问,多线程访问也不会产生异常,所以它是安全的,反之StringBuilder没有使用ynchronized关键字

方法清单

StringBuilder方法

builder.length();
builder.append(str); // 追加数据;
builder.append(c); // 追加数据;

builder.insert(offset, str); // 向指定位置插入数据;
builder.insert(offset, c);

builder.setCharAt(i, c);
builder.deleteCharAt(i); // 删除指定位置的数据;
builder.delete(beginIdx, endIndex);; // 删除指定范围的数据[startIdx, endIdx-1];

builder.toString(); //将对象中的数据以字符串的形式返回;
builder.reverse(); // 将对象中的数据反转;

StringBuffer方法

与上面的StringBuilder的方法一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂亭亭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值