1看實(shí)現(xiàn):
1.1String因?yàn)楸籪inal修飾的類辽旋,所以不能被繼承妓盲;
1.2String實(shí)現(xiàn)了Serializable和Comparable接口杂拨,表示String支持序列化和可以比較大小悯衬;
1.3String底層是通過char類型的數(shù)據(jù)實(shí)現(xiàn)的弹沽,并且被final修飾,所以字符串的值創(chuàng)建之后就不可以被修改筋粗,具有不可變性贷币。
2String實(shí)例化的兩種方式
2.1通過賦值方式實(shí)例化
2.2通過構(gòu)造器的方式實(shí)例化
3String與char[]之間相互裝換
3.1String轉(zhuǎn)char[],調(diào)用String的toCharArray方法
3.2char[]轉(zhuǎn)String,調(diào)用String的構(gòu)造器
3.3String轉(zhuǎn)byte[]亏狰,調(diào)用String的getBytes方法
3.4byte[]轉(zhuǎn)String役纹,調(diào)用String的構(gòu)造器
4StringBuffer和StringBuilder
StringBuffer、StringBuilder和String類似暇唾,底層都是用數(shù)組來存儲(chǔ)字符串的值(底層都是通過char數(shù)組實(shí)現(xiàn)的)促脉,調(diào)用有參構(gòu)造函數(shù)創(chuàng)建一個(gè)StringBuffer對(duì)象時(shí),數(shù)組長(zhǎng)度是根據(jù)當(dāng)前對(duì)象的值來決定數(shù)組的長(zhǎng)度
5總結(jié)
String策州、StringBuffer和StringBuilder的異同瘸味?
相同點(diǎn):底層都是通過char數(shù)組實(shí)現(xiàn)的
不同點(diǎn):
? ? String對(duì)象一旦創(chuàng)建,其值是不能修改的够挂,如果要修改旁仿,會(huì)重新開辟內(nèi)存空間來存儲(chǔ)修改之后的對(duì)象;而StringBuffer和StringBuilder對(duì)象的值是可以被修改的孽糖;
? ? StringBuffer幾乎所有的方法都使用synchronized實(shí)現(xiàn)了同步枯冈,線程比較安全,在多線程系統(tǒng)中可以保證數(shù)據(jù)同步办悟,但是效率比較低尘奏;而StringBuilder 沒有實(shí)現(xiàn)同步,線程不安全病蛉,在多線程系統(tǒng)中不能使用 StringBuilder炫加,但是效率比較高瑰煎。
? ? 如果我們?cè)趯?shí)際開發(fā)過程中需要對(duì)字符串進(jìn)行頻繁的修改,不要使用String俗孝,否則會(huì)造成內(nèi)存空間的浪費(fèi)酒甸;當(dāng)需要考慮線程安全的場(chǎng)景下使用 StringBuffer,如果不需要考慮線程安全赋铝,追求效率的場(chǎng)景下可以使用 StringBuilder烘挫。