簡體   English   中英

如何實現StringBuilder以避免不可變的字符串分配問題?

[英]How is a StringBuilder implemented to avoid the immutable string allocation problem?

如何實現StringBuilder以避免不可變的字符串分配問題?

StringBuilder aliasA = new StringBuilder("a");
StringBuilder dot = new StringBuilder(".");
Clausula clause1 = new Clausula(aliasA.append(dot).append("id").toString());
Clausula clause2 = new Clausula(aliasA.append(dot).append("name").toString());

通過使用char數組。 您可以在JDK源代碼中看到這一點。 在JDK 1.8(我有一個方便的源代碼)中, StringBuilder構建在AbstractStringBuilder之上,后者使用它來保存數據:

char[] value;
int    count;

Karol Dowbecki說 JDK 9“有時”使用byte而不是char ;我沒有理由懷疑他。:-))

count告訴類有多少value是實際數據而不是數組中的可用空間。 它從char[16] (除非你事先告訴它你可能需要什么容量)並根據需要重新分配和復制。

它只在你調用toString時創建一個字符串,使用String(char[],int,int)構造函數 (或者可能是一個接受byte[]有時是JDK9)來復制實際使用的數組內容部分:

public String toString() {
    // Create a copy, don't share the array
    return new String(value, 0, count);
}

在場景后面,它使用char[] (或JDK 9或更新版本中的byte[] )來存儲字符。 只有在調用StringBuilder.toString()之后才會創建新的String對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM