String,StringBuffer,StringBuilder,StringWriter的效率差

本文通过实验对比分析了Java中String、StringBuffer、StringBuilder三种字符串操作方式的性能表现,结果显示StringBuilder最为高效,其次是StringBuffer,而String操作速度较慢。实验数据随字符串长度增加呈非线性变化,可能与函数状态保存有关。

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

String最慢其次StringBuffer,最快StringBuilder,而且字符串的操作也影响着效率。

没有数据显得没有说服力,做了一下实验。

import java.io.StringWriter;


public class LearnTest {
<span style="white-space:pre">	</span>public static void main(String[] args) {
<span style="white-space:pre">		</span>// TODO Auto-generated method stub\
<span style="white-space:pre">		</span>String str="";
<span style="white-space:pre">		</span>StringBuffer strbf=new StringBuffer("");
<span style="white-space:pre">		</span>StringBuilder strbd=new StringBuilder("");
<span style="white-space:pre">		</span>StringWriter strwr=new StringWriter();
<span style="white-space:pre">		</span>double begin,end;
<span style="white-space:pre">		</span>begin=System.currentTimeMillis();
<span style="white-space:pre">		</span>for(int i=0;i<100000;i++)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>str+="1000";
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>end=System.currentTimeMillis();
<span style="white-space:pre">		</span>System.out.println("String+=: "+(end-begin));
<span style="white-space:pre">		</span>str="";
<span style="white-space:pre">		</span>begin=System.currentTimeMillis();
<span style="white-space:pre">		</span>for(int i=0;i<100000;i++)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>str=str+"1000";
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>end=System.currentTimeMillis();
<span style="white-space:pre">		</span>System.out.println("String=+: "+(end-begin));
<span style="white-space:pre">		</span>begin=System.currentTimeMillis();
<span style="white-space:pre">		</span>for(int i=0;i<100000;i++)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>strbf.append("1000");
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>end=System.currentTimeMillis();
<span style="white-space:pre">		</span>System.out.println("StringBuffer: "+(end-begin));
<span style="white-space:pre">		</span>begin=System.currentTimeMillis();
<span style="white-space:pre">		</span>for(int i=0;i<100000;i++)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>strbd.append("1000");
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>end=System.currentTimeMillis();
<span style="white-space:pre">		</span>System.out.println("StringBuilder: "+(end-begin));
<span style="white-space:pre">		</span>begin=System.currentTimeMillis();
<span style="white-space:pre">		</span>for(int i=0;i<100000;i++){
<span style="white-space:pre">			</span>strwr.append("1000");
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>end=System.currentTimeMillis();
<span style="white-space:pre">		</span>System.out.println("StringWriter:"+(end-begin));<span style="white-space:pre">		</span>
<span style="white-space:pre">	</span>}
}
测试结果

n=1000

String+=: 11.0
String=+: 3.0
StringBuffer: 0.0
StringBuilder: 0.0
StringWriter: 0.0

n=10000

String+=: 250.0
String=+: 191.0
StringBuffer: 1.0
StringBuilder: 0.0
StringWriter: 3.0
n=100000

String+=: 19375.0
String=+: 20145.0
StringBuffer: 5.0
StringBuilder: 1.0
StringWriter: 7.0
可以发现递增非线性,可能跟函数状态的保存有关系

去掉String比较一下后两者

n=1000000:

StringBuffer: 40.0
StringBuilder: 22.0
StringWriter: 42.0
n=10000000:

StringBuffer: 413.0
StringBuilder: 418.0
StringWriter: 379.0
n=100000000

我分配的空间就不足了,也许Buffer的效率会高吧。。。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值