String与stringbuilder的效率差异

上代码

public static void main(String[] args) {
    String s = "qwer";
    StringBuilder s1=new StringBuilder("qwer");
    //使用stringbuilder的效率
    long startTime = System.currentTimeMillis();
    for (int i = 0; i < 10000; i++) {
   s1.append("asdf").append("zxcv").append("jkl").append("iop");
    }
    long endTime = System.currentTimeMillis();
    //获取循环执行所用的时间
    float seconds = (endTime - startTime) ;
    //stringbuilder所用的时间
    System.out.println(seconds);
    //使用string的效率
    long endTime1 = System.currentTimeMillis();
    for (int i = 0; i < 10000; i++) {
          s = s + "asdf" + "zxcv" + "jkl" + "iop";
    }
    long endTime2 = System.currentTimeMillis();
    //string所用的时间
    float seconds2 = (endTime2 - endTime1) ;
    System.out.println(seconds2);

}
执行结果对比
7.0
1502.0
Process finished with exit code 0

可以明显看出来StringBuilder比String快多了。但是快的原因是什么呢?String每次进行“+”操作,编译器是怎么执行的?
其实在string进行“+”的操作的时候 编译器会自动引入StringBuilder对象,用来构造最终的string对象。每一次“
+“操作都会产生一个新的StringBuilder对象并且为每一个字符串调用一次append()方法,最后调用tostring()来生成结果。
那么既然编译器会自动优化给我们是用StringBuilder对象,那么为什么还会存在效率差异呢?
因为如果源代码里使用StringBuilder对象,编译器只会生成一个StringBuilder对象,来进行循环的赋值操作,
而且使用StringBuilder可以显式的给声明长度,如果已经知道对象的大概长度,那么预先制定大小,还可以避免多次
重新分配缓存的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值