`
lcy0202
  • 浏览: 176470 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

StringBuffer和StringBuilder的区别

 
阅读更多

今天去面试的时候被问到了这个问题,没答上来,之前一直只是知道String和StringBuffer的区别(String是不可变的,StringBuffer是可变的,提供了很多方法进行对字符串的操作,增加修改删除啊),但是问道StringBuilder的时候就一下子蒙了,之前几乎没有用过StringBuilder.....所以,就没所以啦,搞砸了,不过很感激面试官,他问到我的很多的弱点,让我学会用新的角度去审视技术。废话不多说了,直接看吧。

总的来说,有一下不同点:

      StringBuffer是线程安全的,StringBuilder是非线性安全的。原因何在,直接剖析java源码:

先看StringBuffer的

  public synchronized StringBuffer append(String str) {
	super.append(str);
        return this;
    }
 

再看看StringBuilder的

  public StringBuilder append(String str) {
	super.append(str);
        return this;
    }

 可以看到StringBuffer是采用了同步处理,因而线程安全,其余方法体都是差不多一致,只是线程安全性处理差异。

有人说,StringBuffer和StringBuilder还有性能差异,其实还是归于上面的差异,StringBuffer加上线程安全处理之后,当然是要会消耗资源,Synchronize处理的过程,包括自动解锁什么的肯定会消耗资源,所以性能差异还是由线程安全处理的区别演绎出来的差异。

说到性能上面,可以多说一下“+”和StringBuilder的append方法的性能比较情况

比如说一个字符串添加一个“a”,加10000次,哪个性能更好点呢??

经过测试StringBuilder好很多,“+”的处理大概花了800毫秒但是StringBuilder花了0.8毫秒(测试数据或许有差异,但是两者的性能上面是完全不同一个层次),原因是StringBuilder省去了很多的JVM的后台线程~~~

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics