String、StringBuffer与StringBuilder之间区别

本文对比了Java中String、StringBuffer与StringBuilder的执行速度,并详细解释了它们之间的差异。通过具体的代码示例说明了不同场景下如何选择合适的字符串类型,以达到最佳的性能表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.三者在执行速度方面的比较:StringBuilder>StringBuffer>String

2.String<(StringBuilder,StringBuffer)的原因

String:字符串常量

StringBuffer:字符串变量

StringBuilder:字符串变量

例如

        String s="abcd";
        s=s+1;
        System.out.println(s);//abcd1

我们明明改变了String型的变量s,为什么说没有改变呢?

jvm是这个解析这段代码的:首先创建对象s,赋予abcd,然后在创建一个新的对象s用来 执行第二行代码,也就是说我们之前对象s并没有变化,

所有说String类型是不可改变的对象,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会被gc回收,故效率低

而StringBuffer与StringBuilder是字符串变量,是可变的对象,每当我们用他们对字符串操作时,实际上是在一个对象上操作,不像String一样创建额外的对象进行

操作,故速度快

3.一个特殊的例子

 String str="this"+" is"+" only"+" a"+"simple"+"test";
 StringBuilder sBuilder=new StringBuilder("this").append("is").append("only ").append("a").append("simple").append("test");

----

实际上str就相当于

String str="this is only a simple test";

但是如果字符串是来自另外的String对象的话,速度就没那么快了,例如

String str1="this";

String str2="is";

.....

String str6="test";

String str=str1+str2+...+str6;

4.StringBuffer余StringBuilder

StringBuffer:线程安全的

StringBuilder:线程非安全的

当字符串缓冲区被多个线程使用的时候,JVM不能保证StringBuilder的操作时安全的,虽然他速度最快,但可以保证StringBuffer是可以正确操作的.大多数情况下

我们是在单线程下进程操作,所有大多数情况下是建议使用StringBuilder而不用StringBuffer,就是速度的原因.


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

                  2.单线程操作字符串缓冲区, 用StringBuilder

                   3.多线程操作字符串缓冲区,用StringBuffer




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值