可變性
String類中使用字符數(shù)組保存字符串撩幽,privatefinal char value[]库继,所以string對象是不可變的。StringBuilder與StringBuffer都繼承自AbstractStringBuilder類窜醉,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串宪萄,char[]value,這兩種對象都是可變的榨惰。
線程安全性
String中的對象是不可變的拜英,也就可以理解為常量,線程安全读串。AbstractStringBuilder是StringBuilder與StringBuffer的公共父類聊记,定義了一些字符串的基本操作撒妈,如expandCapacity、append排监、insert狰右、indexOf等公共方法。StringBuffer對方法加了同步鎖或者對調(diào)用的方法加了同步鎖舆床,所以是線程安全的棋蚌。StringBuilder并沒有對方法進(jìn)行加同步鎖,所以是非線程安全的挨队。
性能
每次對String 類型進(jìn)行改變的時候谷暮,都會生成一個新的String 對象,然后將指針指向新的String 對象盛垦。StringBuffer每次都會對StringBuffer 對象本身進(jìn)行操作湿弦,而不是生成新的對象并改變對象引用。相同情況下使用StirngBuilder 相比使用StringBuffer 僅能獲得10%~15% 左右的性能提升腾夯,但卻要冒多線程不安全的風(fēng)險颊埃。