1. StringBuilder
一個(gè)可變的字符序列。此類提供一個(gè)與 StringBuffer 兼容的 API,但不保證同步。該類被設(shè)計(jì)用作 StringBuffer 的一個(gè)簡(jiǎn)易替換,用在字符串緩沖區(qū)被單個(gè)線程使用的時(shí)候(這種情況很普遍)。如果可能,建議優(yōu)先采用該類,因?yàn)樵诖蠖鄶?shù)實(shí)現(xiàn)中,它比StringBuffer 要快。
在 StringBuilder 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的數(shù)據(jù)。每個(gè)方法都能有效地將給定的數(shù)據(jù)轉(zhuǎn)換成字符串,然后將該字符串的字符追加或插入到字符串生成器中。append 方法始終將這些字符添加到生成器的末端;而insert 方法則在指定的點(diǎn)添加字符。
例如,如果 z 引用一個(gè)當(dāng)前內(nèi)容為 "start" 的字符串的生成器對(duì)象,則該方法調(diào)用 z.append("le") 將使字符串生成器包含 "startle",而z.insert(4, "le") 將更改字符串生成器,使之包含 "starlet"。
通常,如果 sb 引用 StringBuilder 的實(shí)例,則 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。每個(gè)字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的長(zhǎng)度沒(méi)有超出此容量,就無(wú)需分配新的內(nèi)部緩沖區(qū)。如果內(nèi)部緩沖區(qū)溢出,則此容量自動(dòng)增大。
將 StringBuilder 的實(shí)例用于多個(gè)線程是不安全的。如果需要這樣的同步,則建議使用 StringBuffer。
線程安全的可變字符序列。一個(gè)類似于 String 的字符串緩沖區(qū),但不能修改。雖然在任意時(shí)間點(diǎn)上它都包含某種特定的字符序列,但通過(guò)某些方法調(diào)用可以改變?cè)撔蛄械拈L(zhǎng)度和內(nèi)容。
可將字符串緩沖區(qū)安全地用于多個(gè)線程。可以在必要時(shí)對(duì)這些方法進(jìn)行同步,因此任意特定實(shí)例上的所有操作就好像是以串行順序發(fā)生的,該順序與所涉及的每個(gè)線程進(jìn)行的方法調(diào)用順序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的數(shù)據(jù)。每個(gè)方法都能有效地將給定的數(shù)據(jù)轉(zhuǎn)換成字符串,然后將該字符串的字符追加或插入到字符串緩沖區(qū)中。append 方法始終將這些字符添加到緩沖區(qū)的末端;而insert 方法則在指定的點(diǎn)添加字符。
例如,如果 z 引用一個(gè)當(dāng)前內(nèi)容為 "start" 的字符串緩沖區(qū)對(duì)象,則此方法調(diào)用 z.append("le") 會(huì)使字符串緩沖區(qū)包含 "startle",而z.insert(4, "le") 將更改字符串緩沖區(qū),使之包含 "starlet"。
通常,如果 sb 引用 StringBuilder 的一個(gè)實(shí)例,則 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。
當(dāng)發(fā)生與源序列有關(guān)的操作(如源序列中的追加或插入操作)時(shí),該類只在執(zhí)行此操作的字符串緩沖區(qū)上而不是在源上實(shí)現(xiàn)同步。
每個(gè)字符串緩沖區(qū)都有一定的容量。只要字符串緩沖區(qū)所包含的字符序列的長(zhǎng)度沒(méi)有超出此容量,就無(wú)需分配新的內(nèi)部緩沖區(qū)數(shù)組。如果內(nèi)部緩沖區(qū)溢出,則此容量自動(dòng)增大。從 JDK 5 開(kāi)始,為該類補(bǔ)充了一個(gè)單個(gè)線程使用的等價(jià)類,即StringBuilder。與該類相比,通常應(yīng)該優(yōu)先使用StringBuilder 類,因?yàn)樗С炙邢嗤牟僮鳎捎谒粓?zhí)行同步,所以速度更快。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注