String、Stringbuffer和Stringbuilder的区别

本文探讨了Java中String、StringBuilder与StringBuffer的性能差异,重点分析了不同场景下这些类别的适用性,包括单线程与多线程环境下的最佳实践。

纯属个人总结

1.运行速度方面

由快到慢的排列为StringBuilder > StringBuffer > String

原因:

String为字符串的常量,而StringBuilder和StringBuffer为字符串变量。对象一旦创建是不能够更改的,但是变量是可以的。

String str = "abc";

s =s+1;

说明:我们所看到的就是变量发生了改变,但是实际的情况是没有发生改变。为什么这么说呢?

这实际就是一种假象,jvm是这样解释的,首先创建了变量str,赋值为“abc”,在执行第二段代码的时候,jvm又重新的创建了一个变量str,也就是说,原有的str变量时没有改变的,所以说string是不可改变的对象。也是因为这种机制,每次执行的时候都会创建个新的对象,而原来的对象会被GC回收,因此效率很慢。

但是stringbuilder和stringbuffer就不一样了,它们属于字符串变量,是可以改变的。每当我们对字符串进行操作,实际上是对原有的对象进行操作,



stringBuffer和stringBuilder区别

StringBuilder:线程非安全的

StringBuffer:线程安全的

当我们字符串缓冲区被多个多线程使用时候,jvm不能保证stringbuilder的操作是安全的,但是能保证stringbuffer是安全的。但是在多数的情况下,我们使用stringbuilder而不使用stringbuffer的原因就是速度问题。




 对于三者使用的总结: 1.如果要操作少量的数据用 = String

             2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

              3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值