我看過代碼,大多數時候人們已經使用過StringBuffer,只是爲了避免多線程的問題,但是我不能來到需要StringBuffer的一般情況(大部分時間) 。在多線程環境中使用StringBuilder
如果我有像下面的方法 - private String getPath(){ return new StringBuilder("a").append("b").toString(); }
即使這種方法會被多個線程使用它應該沒問題。 (?) 因爲我們正在創建一個新的Stringbuilder,並且每個線程都有自己的棧(引用)副本。
僅當我們將StringBuilder作爲方法參數時纔會出現問題。
你是什麼意思?「即使這個方法將被多個線程使用,它應該沒問題。」?多線程(如果沒有實現鎖定)的主要問題是共享數據的一致性。如果您在幾個線程之間共享一個字符串,並且其中一些可以寫入它,則每個線程可能會讀取不同的字符串值。如果每次從函數中創建一個新的(常量值)字符串,則不存在這樣的問題,但是無論如何您都可以返回一個常量字符串值。所以我假設你打算返回一些變量的值,對嗎? –
以上例(示例),這裏每個線程將調用getPath()方法,它每次實例化一個新的StringBuilder並返回一個字符串(它是不可變的)。那麼,在這種情況下,我需要使用StringBuffer嗎? – Ouney
我相信你不需要 –