12

このコードを実行すると:

StringBuffer name = new StringBuffer("stackoverflow.com");
System.out.println("Length: " + name.length() + ", capacity: " + name.capacity());

出力が得られます:

長さ:17、容量:33

明らかに長さは文字列の文字数に関連していますが、容量がどのくらいかわかりませんか? スペースを再割り当てする前に StringBuffer が保持できる文字数ですか?

4

14 に答える 14

9

参照: JavaSE 6 java.lang.StringBuffer capacity()

しかし、あなたの仮定は正しいです:

容量は、新しく挿入された文字に使用できるストレージの量であり、それを超えると割り当てが発生します

于 2011-11-04T15:22:37.737 に答える
3

内部バッファのサイズです。Javadocが言うように:

すべての文字列バッファーには容量があります。文字列バッファに含まれる文字列の長さが容量を超えない限り、新たに内部バッファ配列を確保する必要はありません。内部バッファがオーバーフローすると、自動的に大きくなります。

于 2011-11-04T15:22:27.847 に答える
3

はい、その通りです。詳細については、JavaDocを参照してください。

文字列バッファに含まれる文字列の長さが容量を超えない限り、新たに内部バッファ配列を確保する必要はありません。内部バッファがオーバーフローすると、自動的に大きくなります。

于 2011-11-04T15:22:42.727 に答える
2

文字を格納するために内部的に配列をStringBuffer 使用します。容量は、その配列charの初期サイズです。char

詳細情報は、 http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.htmlから入手できます。

于 2011-11-04T15:21:24.873 に答える
2

http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html#capacity%28%29から

public int 容量()

現在の容量を返します。容量は、新しく挿入された文字に使用できるストレージの量であり、それを超えると割り当てが発生します。

こちらも同資料より

リリース JDK 5 の時点で、このクラスは、単一スレッドで使用するために設計された同等のクラス StringBuilder で補足されています。StringBuilder クラスは、同じ操作をすべてサポートしますが、同期を実行しないため高速であるため、通常はこれよりも優先して使用する必要があります。

于 2011-11-04T15:21:27.953 に答える
2

公式の J2SE ドキュメントから引用

容量は、新しく挿入された文字に使用できるストレージの量であり、それを超えると割り当てが発生します。

通常は長さ+16が最小割り当てですが、文字数、つまりそのサイズが割り当てられたサイズを超えると、StringBufferもそのサイズを(固定量で)増やしますが、割り当てられる量によってはできませんそれを計算します。

于 2011-11-04T15:21:45.150 に答える
2

はい、まさにその通りです。StringBufferその点で a に少し似ていると考えることができます(明らかに、Java では型引数としてVector<char>使用できないことを除いて...)char

于 2011-11-04T15:21:45.147 に答える
2

すべての文字列バッファーには容量があります。文字列バッファに含まれる文字列の長さが容量を超えない限り、新たに内部バッファ配列を確保する必要はありません。内部バッファがオーバーフローすると、自動的に大きくなります。

から: http://download.oracle.com/javase/1.4.2/docs/api/java/lang/StringBuffer.html

于 2011-11-04T15:22:17.007 に答える
2

StringBuffer には、追加した文字列を保持する char[] があります。そのバッファに現在割り当てられているメモリの量が容量です。現在使用されている量は長さです。

于 2011-11-04T15:22:20.910 に答える
1

「すべての文字列バッファには容量があります。文字列バッファに含まれる文字シーケンスの長さが容量を超えない限り、新しい内部バッファ配列を割り当てる必要はありません。内部バッファがオーバーフローすると、自動的に作成されます。大きい」

http://download.oracle.com/javase/1.3/docs/api/java/lang/StringBuffer.html-capacity ()およびensurecapacity()を参照してください

于 2011-11-04T15:25:36.797 に答える
1

容量は、新しく挿入された文字に使用できるストレージの量です。これは、length() とは異なります。length() は文字の総数を返し、文字数が 16 未満の場合、デフォルトで容量は値 16 を返します。 16文字以上の場合、容量は文字数+16となります。この場合、文字数=17 SO,容量=17+16=33

于 2016-06-26T12:03:59.767 に答える
0

Ivan、capacity()のドキュメントを読んでください - それはあなたの質問に直接答えます...

于 2011-11-04T15:22:49.997 に答える