String、StringBuffer、StringBuilder區(qū)別
StringBuffer、StringBuilder和String一樣托享,也用來(lái)代表字符串。String類是不可變類浸赫,任何對(duì)String的改變都 會(huì)引發(fā)新的String對(duì)象的生成闰围;StringBuffer則是可變類,任何對(duì)它所指代的字符串的改變都不會(huì)產(chǎn)生新的對(duì)象既峡。既然可變和不可變都有了羡榴,為何還有一個(gè)StringBuilder呢?相信初期的你运敢,在進(jìn)行append時(shí)校仑,一般都會(huì)選擇StringBuffer吧!
先說(shuō)一下集合的故事传惠,HashTable是線程安全的迄沫,很多方法都是synchronized方法,而HashMap不是線程安全的卦方,但其在單線程程序中的性能比HashTable要高羊瘩。StringBuffer和StringBuilder類的區(qū)別也是如此,他們的原理和操作基本相同,區(qū)別在于StringBufferd支持并發(fā)操作尘吗,線性安全的逝她,適 合多線程中使用。StringBuilder不支持并發(fā)操作睬捶,線性不安全的黔宛,不適合多線程中使用。新引入的StringBuilder類不是線程安全的擒贸,但其在單線程中的性能比StringBuffer高臀晃。
不考慮多線程,采用String對(duì)象時(shí)(我把Count/100)介劫,執(zhí)行時(shí)間比其他兩個(gè)都要高积仗,而采用StringBuffer對(duì)象和采用StringBuilder對(duì)象的差別也比較明顯。由此可見(jiàn)蜕猫,如果我們的程序是在單線程下運(yùn)行寂曹,或者是不必考慮到線程同步問(wèn)題,我們應(yīng)該優(yōu)先使用StringBuilder類回右;如果要保證線程安全隆圆,自然是StringBuffer。
從后面List的測(cè)試結(jié)果可以看出翔烁,除了對(duì)多線程的支持不一樣外渺氧,這兩個(gè)類的使用方式和結(jié)果幾乎沒(méi)有任何差別,