1. String 類
String的值是不可變的谭梗,這就導(dǎo)致每次對(duì)String的操作都會(huì)生成新的String對(duì)象止潮,不僅效率低下凶掰,而且大量浪費(fèi)有限的內(nèi)存空間把敢。
String a = "a"; //假設(shè)a指向地址0x0001
a = "b";//重新賦值后a指向地址0x0002寄摆,但0x0001地址中保存的"a"依舊存在,但已經(jīng)不再是a所指向的,a 已經(jīng)指向了其它地址修赞。
因此String的操作都是改變賦值地址而不是改變值操作婶恼。
2. StringBuffer是可變類,和線程安全的字符串操作類柏副,任何對(duì)它指向的字符串的操作都不會(huì)產(chǎn)生新的對(duì)象勾邦。 每個(gè)StringBuffer對(duì)象都有一定的緩沖區(qū)容量,當(dāng)字符串大小沒有超過容量時(shí)割择,不會(huì)分配新的容量眷篇,當(dāng)字符串大小超過容量時(shí),會(huì)自動(dòng)增加容量荔泳。
StringBuffer buf=new StringBuffer(); //分配長(zhǎng)16字節(jié)的字符緩沖區(qū)
StringBuffer buf=new StringBuffer(512); //分配長(zhǎng)512字節(jié)的字符緩沖區(qū)
StringBuffer buf=new StringBuffer("this is a test")//在緩沖區(qū)中存放了字符串蕉饼,并在后面預(yù)留了16字節(jié)的空緩沖區(qū)虐杯。
3.StringBuffer
StringBuffer和StringBuilder類功能基本相似,主要區(qū)別在于StringBuffer類的方法是多線程椎椰、安全的厦幅,而 StringBuilder不是線程安全的,相比而言慨飘,StringBuilder類會(huì)略微快一點(diǎn)。對(duì)于經(jīng)常要改變值的字符串應(yīng)該使用 StringBuffer和StringBuilder類译荞。
4.線程安全
StringBuffer 線程安全
StringBuilder 線程不安全
5.速度
一般情況下,速度從快到慢:StringBuilder > StringBuffer > String,這種比較是相對(duì)的瓤的,不是絕對(duì)的。
6.總結(jié)
(1).如果要操作少量的數(shù)據(jù)用 = String
(2).單線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuilder
(3).多線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuffer
出自:http://www.open-open.com/lib/view/open1322537017406.html