StringBuffer?與?StringBuilder?中的方法和功能完全是等價(jià)的娜睛,只是
StringBuffer?中的方法大都采用了?synchronized?關(guān)鍵字進(jìn)行修飾哆键,因
此是線程安全的掘托,而?StringBuilder?沒(méi)有這個(gè)修飾,可以被認(rèn)為是線程
不安全的籍嘹。
StringBuffer?始于?JDK?1.0
StringBuilder?始于?JDK?1.5
從?JDK?1.5?開(kāi)始闪盔,帶有字符串變量的連接操作(+),JVM?內(nèi)部采用的是
StringBuilder?來(lái)實(shí)現(xiàn)的辱士,而之前這個(gè)操作是采用?StringBuffer?實(shí)現(xiàn)的泪掀。
如果一個(gè)字符串變量是在方法里面定義,這種情況只可能有一個(gè)線程訪問(wèn)它颂碘,不存在不安全的因素了异赫,則用StringBuilder。如果要在類(lèi)里面定義成員變量头岔,并且這個(gè)類(lèi)的實(shí)例對(duì)象會(huì)在多線程環(huán)境下使用塔拳,那么最好用StringBuffer。
這一點(diǎn)和HashTable 和 HashMap有相似之處:
HashTable采用synchronized來(lái)保證線程安全峡竣,在線程競(jìng)爭(zhēng)激烈的情況下靠抑,效率非常低下。
HashMap 沒(méi)有采用synchronized适掰,所以是線程不安全的颂碧。因?yàn)檫@個(gè)原因有時(shí)候又不能使用HashMap。
此時(shí)就需要 concurrentHashMap了攻谁。