String、StringBuilder、StringBuffer的区别

String是不可变的,每次操作都会创建新对象,效率低且消耗内存。StringBuilder和StringBuffer则是可变的,适合字符串拼接操作。StringBuffer线程安全,适合多线程环境,StringBuilder速度快,适合单线程环境。
摘要由CSDN通过智能技术生成

1.String与StringBuilder、StringBuffer的主要区别

String的值是不可变的,而StringBuilder、StringBuffer值是可变的。
接下来给大家解释一下为什么说String的值是不可变的。
 String id = "我的";
        System.out.println(id);
        id="你的";
        System.out.println(id);

结果是:

虽然输出的值不一样,但这是String的操作生成新了String对象,原有的并没有改变。

在内存中原有的不会改变,String的操作后会在内存中新生成一个。不仅效率低下,而且浪费大量优先的内存空间

 

而StringBuilder、StringBuffer会在原有的基础上改变值。

String 固定不可变字 符串
StringBuffer 可变
StringBuilder 可变
String 的值是不可变
的,这就导致每次对
String 的操作都会生
成新的 String 对象,
不仅效率低下,而且
浪费大量优先的内存
空间
StringBuffer 是可变类,和线程安全的字符串
操作类,任何对它指向的字符串的操作都不会
产生新的对象。每个 StringBuffer 对象都有一
定的缓冲区容量,当字符串大小没有超过容量
时,不会分配新的容量,当字符串大小超过容
量时,会自动增加容量
可变类,速度
更快
不可变
可变
可变
线程安全
线程不安全
多线程操作字符串
单线程操作字符串

 

 

 

 

 

 

 2.StringBuilder和StringBuffer的主要区别

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
因此StringBuffer适用于多线程环境下的大量操作。

对于StringBuilder来说,执行效率虽然高,但是因为线程不安全,所以不建议在多线程的环境下对同一个StringBuilder对象进行操作。因此StringBuilder适用于单线程环境下的大量字符串操作。

3.总结

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

 感谢大家的观看,希望能给大家带来帮助

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值