1.可變性
String內(nèi)部是由final修飾的,所以是一個(gè)不可變的類呜舒,所以每次修改string值的時(shí)候都會(huì)產(chǎn)生一個(gè)新的對(duì)象;
StringBuffer和StringBuilder是一個(gè)可變類建丧,字符串的變更不會(huì)產(chǎn)生新的對(duì)象恕汇;
2.線程安全性
String由于是不可變的所以是線程安全的
StringBuffer也是線程安全,因?yàn)樗鼉?nèi)部使用一個(gè)synchronized同步關(guān)鍵字厅克;
StringBuilder不是線程安全赔退,所以在多線程下操作應(yīng)該使用以上兩種;
3.性能方面
String由于不可變证舟,在做字符串拼接或修改硕旗,需要重新創(chuàng)建新的對(duì)象以及內(nèi)存分配;
StringBuffer比String性能更高點(diǎn)女责,因?yàn)樗目勺冃云崦叮馕吨址恍薷幕蛘咂唇硬粫?huì)導(dǎo)致新對(duì)象創(chuàng)建;
4.存儲(chǔ)方面
String存儲(chǔ)在字符串常量池中抵知;
Stringbuffer和Stringbuider是存儲(chǔ)在堆內(nèi)存中的墙基;
Stringbuffer和stringbuilder都是派生自AbstractStringbuidler這樣一個(gè)抽象類软族。