どのようにStringBuilderのは不変の文字列の割り当ての問題を回避するために実装されていますか?

Shaluグプタ:

どのようにされた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());
TJクラウダー:

使用することによりchar、配列を。あなたは、JDKのソースでこれを見ることができます。JDK 1.8(1私は便利のためのソースを持っている)で、StringBuilder上に構築されたAbstractStringBuilderデータを保持するためにこれを使用しています。

char[] value;
int    count;

カロルDowbeckiは言う JDK 9は「時々 」使用するbyte代わりにchar、私は彼を疑う理由はない:-))

countどのくらいのクラスを伝えvalue、アレイ内だけで使用可能なスペース対実際のデータです。それはで始まりchar[16]必要に応じて再割り当てとコピー(あなたが必要とするかもしれないどのような立場事前にそれを指示しない限り)。

それだけであなたが呼んで文字列を作成しtoString使用して、String(char[],int,int)コンストラクタ(またはおそらく受け入れて1 byte[]実際に使用されている配列の内容の一部のコピーを作成するために、時にはJDK9を):

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222246&siteId=1