常量池冲甘,為了方便重復(fù)創(chuàng)建相同常量值的對(duì)象而出現(xiàn)的绩卤。常量池相當(dāng)于一個(gè)內(nèi)存空間,存在于方法中江醇。
按照代碼順序濒憋,先在常量池中創(chuàng)建‘a(chǎn)bc’,再將‘a(chǎn)bc’指向s1陶夜,創(chuàng)建s2時(shí)凛驮,直接將常量池中存在的‘a(chǎn)bc’指向s2;
“==”在這里比較的是對(duì)象引用条辟;
String 中的equals方法經(jīng)過(guò)重寫后操作為“比較此字符串與指定的對(duì)象黔夭,當(dāng)且僅當(dāng)該參數(shù)不為 null,并且是表示與此對(duì)象相同的字符序列的 String 對(duì)象時(shí)羽嫡,結(jié)果才為 true”本姥。
通過(guò)?new?來(lái)創(chuàng)建對(duì)象,創(chuàng)建出的一定是不同的對(duì)象杭棵,即使字符串的內(nèi)容是相同的婚惫。
“ String s1=new String(“abc”)”語(yǔ)句創(chuàng)建了幾個(gè)對(duì)象?
該語(yǔ)句首先String s1是聲明,new String(“abc”)先在常量池中查找辰妙,若沒(méi)有則創(chuàng)建“abc”鹰祸,而后通過(guò)new在堆內(nèi)存中創(chuàng)建對(duì)象,把“abc”拷貝賦值密浑。String 定義為初始化一個(gè)新創(chuàng)建的 String 對(duì)象蛙婴,表示一個(gè)與該參數(shù)相同的字符序列;換句話說(shuō)尔破,新創(chuàng)建的字符串是該參數(shù)字符串的一個(gè)副本街图。故創(chuàng)建常量池和堆內(nèi)存中兩個(gè)對(duì)象,兩個(gè)對(duì)象的地址值不一樣懒构。
字符串串聯(lián)是通過(guò) StringBuilder(或 StringBuffer)類及其 append 方法實(shí)現(xiàn)的餐济,字符串轉(zhuǎn)換是通過(guò) toString 方法實(shí)現(xiàn)的。