三者都是字符串類。StringBuilder和StringBuffer都是繼承AbstractStringBuilder類,存儲字符串都是使用數組進行存儲的。java
a. String 類存儲字符串使用的數組被final進行修飾了,當對String對象進行增長修改字符時,都須要從新new一個字符數組,將原來的值拷貝到新的字符數組中,因此當字符串的值須要常常修改的時候就須要考慮用StringBuilder或StringBuffer來進行處理了。數組
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { private final char value[]; }
b.StringBuffer和StringBuilder也是使用字符數組來進行存儲字符串的,但沒有使用final進行修飾;StringBuffer定義的方法都加入了synchronized修飾,也就是說StringBuffer類方法都是線程安全的,而StringBuilder方法沒有被修飾,二者經常使用的方法是append()。安全
當字符串值不會變化時,考慮使用String
當字符串的值多變的時候,考慮使用StringBuilder或者StringBuffer
當要求線程安全時候,考慮使用StringBuffer。app