不可變對象
對象被完全創(chuàng)建之后反镇,對象的內(nèi)部狀態(tài)不能被改變势腮;基本數(shù)據(jù)類型的值不能改變,引用類型的變量不能指向其他的對象烈钞,引用類型指向的對象狀態(tài)也吧能改
1泊碑、String产上,StringBuilder,StringBuffer 內(nèi)部都是用char[]數(shù)組來實(shí)現(xiàn);
從實(shí)際應(yīng)用可能的場景中分析String,StringBuilder,StringBuffer產(chǎn)生的背景
實(shí)際應(yīng)用我們對字符串的操作做出如下幾種操作:插入蛾狗,刪除晋涣,修改,拼接沉桌,截取谢鹊,查找,替換留凭;
String 源代碼char[]是final佃扼,所以對字符串的操作;中間會新建臨時(shí)變量蔼夜,對字符串的操作不會影響原來的字符串兼耀;操作完成返回的是一個(gè)新字符串對象
2、StringBuffer和StringBuidler 封裝的是可變數(shù)組求冷,可變字符序列瘤运;對字符串的操作不會產(chǎn)生新的對象;他們都是繼承AbstractStringBuilder匠题,他們對數(shù)組的操作方法實(shí)現(xiàn)是一樣的拯坟,只是StringBuffer的方法上
加了synchronized關(guān)建字;內(nèi)部對char數(shù)組的操作都是通過System.arraycopy完成
3韭山、StringBuffer 因?yàn)榉椒ㄉ霞恿藄ynchronized關(guān)鍵字郁季,所以對象是線程安全的,所以效率低钱磅;多線程環(huán)境下使用
4梦裂、String 是不可變對象,所以也是線程安全的盖淡,字符少量情況下使用
5年柠、StringBuidler 不是線程安全的,在非多線程環(huán)境下使用禁舷,效率高