我们需要StringBuffer么?
2019獨角獸企業重金招聘Python工程師標準>>>
這些天的工作中,一直在不停的拼字符串,所以較多的使用了StringBuffer這個類,昨天沒事看了看自己的代碼,突然想到面試時經常被問到的StringBuffer和StringBuilder的區別,腦子里只是有個大概的印象,一個是線程安全的,一個是線程不安全的。
當然我也隨手點進去看了看StringBuffer的源代碼,隨便看了兩個常用的方法:append和toString。他們都在方法上做了同步:
public synchronized String toString() { return new String(value, 0, count);}我立馬意識到自己使用StringBuffer是多么大的一個失誤,因為我使用StringBuffer的場景都是把他用作局部變量,根本不會有線程安全的問題,所以我立馬將代碼中所有的StringBuffer替換為StringBuilder。改完了,回來再仔細想想,StringBuffer這個類還有必要存在么?我覺得我們完全可以忽略他的存在,直接使用StringBuilder,原因如下:
1.我們使用StringBuffer的大多數場景都是線程安全的。
2.即使我們把StringBuffer當共享變量,StringBuffer本身提供的同步還是遠遠不能保證線程安全,比如我們經常會這么寫:
StringBuffer sb = new StringBuffer(); public void addRule(String name) {sb.append(name).append("\n"); }即使 StringBuffer保證了append的安全性,但是上面的例子還是線程不安全的。
所以在大多數情況下,StringBuffer的線程安全是完全沒有意義的,我們完全可以用StringBuilder替換。那為什么JDK的源代碼中還是有較多的地方使用StringBuffer了?我們可以看看這篇文章。
轉載于:https://my.oschina.net/xishuixixia/blog/129226
總結
以上是生活随笔為你收集整理的我们需要StringBuffer么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用lucene实现在一个(或者多个)字段
- 下一篇: 分享-WinForm界面开发之布局控件W