關于String 情竹、StringBuffer藐不、StringBuilder、StringTokenizer的區(qū)別的學習

java中有4個類可以對字符或者字符串進行操作鲤妥,他們分別是Character佳吞、String、StringBuffer棉安、StringTokenizer,其中Character用于單個字符操作底扳,String用于字符串操作,屬于不可變類贡耽,而StringBuffer也是用于字符串的操作衷模,不同之處是StringBuffer屬于可變類鹊汛。

String是不可變類,String對象一旦被創(chuàng)建阱冶,其值將不能被改變刁憋,StringBuffer是可變類,當對象被創(chuàng)建后仍然可以對其值進行修改木蹬。如果用String 來保存一個經(jīng)常被修改的字符串時至耻,在字符串被修改時會比StringBuffer多很多附加的操作,同時生成很多無用的對象镊叁,由于這些無用的對象會被垃圾回收器來回收尘颓,因此會影響程序的性能 。

String與StringBuffer的另外一個區(qū)別在于實例化String時晦譬,可以利用構造函數(shù)(String? s1 =? new? ?String ("world"))的方式來對其進行初始化疤苹,也可以用賦值(String? s =? "Hello")的方式來初始化,而StringBuffer只能用構造函數(shù)(StringBuffer? s? =? new? ?StringBuffer("Hello"))的方式來初始化敛腌。

String字符串修改實現(xiàn)的原理如下:

當用String類型來對字符串進行修改時卧土,其實現(xiàn)方法是首先創(chuàng)建一個StringBuffer,其次調(diào)用StringBuffer的append()方法,最后調(diào)用StringBuffer

的toString()方法把結果返回像樊,事例如下:

String? ?s = "Hello";

s+ = “world” ;

以上代碼等價于下述代碼:

StringBuffer? sb? = new??StringBuffer(s);

s.append("world");

s=sb.toString();

由此可以看出尤莺,上述過程比使用StringBuffer多了一些附件的操作,同時也生成了一些臨時的對象凶硅,從而導致程序的執(zhí)行效率降低缝裁,如下示例:

public? class? Test{

pubblic? static? void testString(){

String? s? =? "hello";

String? s1 = "world";

long start? = System.currentTimeMillis();

for? (int? i? = 0 ; i<10000;i++){

s+ = s1;

}

long? end? =?System.currentTimeMillis();

long? runTime = (end -start );

System.out.println("testString:"+runTime);

}

public? static? void testStringBuffer(){

StringBuffer? s? =? new? ?StringBuffer("Hello");

String? s1 = "world";

long start? = System.currentTimeMillis();

for? (int? i? = 0 ; i<10000;i++){

s.append(s1);

}

long? end? =?System.currentTimeMillis();

long? runTime = (end -start );

System.out.println("testStringBuffer:"+runTime);

}

public static? void? main(String[] args){

?testString();

testStringBuffer()

}

}

運行結果:


從程序的運行結果可以看出,當一個字符串需要被經(jīng)常修改時足绅,使用StringBuffer要比String好的多捷绑。

StringBuilder也是被修改的字符串,它與StringBuffer類似氢妈,都是字符串緩沖區(qū)粹污,但是StringBuilder不是線程安全的,如果只是在

單線程中使用字符串緩沖區(qū)首量,那么StringBuilder的效率會更高些壮吩,當多個線程訪問時,最好使用線程安全的StringBuffer加缘。

在執(zhí)行效率方面鸭叙,StringBuilder最高,StringBuffer次之拣宏,String最低沈贝,一般而言,如果操作數(shù)據(jù)量比較小勋乾,應優(yōu)化使用String類宋下,如果在單線程操作大量數(shù)據(jù)時嗡善,優(yōu)先使用StringBuilder,如果在多線程下操作大量數(shù)據(jù)時学歧,優(yōu)先使用StringBuffer罩引。

StringTokenizer是用來分割字符串的工具類,示例如下;

? public? class? Test1{

public static? void main (String args[]){

StringTokenizer st? = new??StringTokenizer(" Welcome? to? shenyang");

? while(st.hasMoreTokens()){

System.out.println(st.nextToken());

}

}

}

運行結果為:


?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枝笨,一起剝皮案震驚了整個濱河市袁铐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伺帘,老刑警劉巖昭躺,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伪嫁,居然都是意外死亡,警方通過查閱死者的電腦和手機偶垮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門张咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人似舵,你說我怎么就攤上這事脚猾。” “怎么了砚哗?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵龙助,是天一觀的道長。 經(jīng)常有香客問我蛛芥,道長提鸟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任仅淑,我火速辦了婚禮称勋,結果婚禮上,老公的妹妹穿的比我還像新娘涯竟。我一直安慰自己赡鲜,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布庐船。 她就那樣靜靜地躺著银酬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筐钟。 梳的紋絲不亂的頭發(fā)上揩瞪,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音盗棵,去河邊找鬼壮韭。 笑死北发,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的喷屋。 我是一名探鬼主播琳拨,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屯曹!你這毒婦竟也來了狱庇?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤恶耽,失蹤者是張志新(化名)和其女友劉穎密任,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偷俭,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡浪讳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涌萤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淹遵。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖负溪,靈堂內(nèi)的尸體忽然破棺而出透揣,到底是詐尸還是另有隱情,我是刑警寧澤川抡,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布辐真,位于F島的核電站,受9級特大地震影響崖堤,放射性物質(zhì)發(fā)生泄漏侍咱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一倘感、第九天 我趴在偏房一處隱蔽的房頂上張望放坏。 院中可真熱鬧,春花似錦老玛、人聲如沸淤年。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麸粮。三九已至,卻和暖如春镜廉,著一層夾襖步出監(jiān)牢的瞬間弄诲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留齐遵,地道東北人寂玲。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像梗摇,于是被迫代替她去往敵國和親拓哟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容