StringBuilderには、Javaの最大容量に対する文字数の制限がありますか?.
StringBuilder url=new StringBuilder();
stmt = connnection.createStatement();
String sql="SOME QUERY";
rs = stmt.executeQuery(sql);
while(rs.next())
{
String emailId=rs.getString("USER_EMAIL_ID");
url.append(emailId);
}
stringBuilder変数「url」には最大容量がありますか、それともすべてを保持できますか?
はい、2147483647(技術的に)の最大整数の容量に制限があります。
StringBuilder
は内部的に文字を保持します char[]
オブジェクトであり、配列にはサイズの制限があります。 他のスレッドで詳細を読む
Java 9が導入されました JEP 254:コンパクト文字列 。これにより、文字をバイト配列に格納することで、文字列をよりスペース効率よく格納できます。すべての文字がラテン1の場合、1文字あたり1バイトが使用されます。それ以外の場合は、1文字あたり2バイトが使用されます。
したがって、答えは次のとおりです。コンパクト文字列が有効になっていて(デフォルト)、StringBuilder
にラテン語の1文字のみが含まれている場合、最大サイズはInteger.MAX_VALUE
です。*、それ以外の場合はInteger.MAX_VALUE / 2
です*。
* または少し少ないですが、 "Do Java配列には最大サイズがありますか?" を参照してください。
このリンクをたどると、さらにクリアになる可能性があります Oracle Docs String Builder Buffer Capacity
ここで、任意のStringBuilderクラスの容量を宣言する必要がある場合、1つのコンストラクターStringBuilder(int initCapacity)
がこれに対して定義されます。
StringBuilder(int initCapacity)
:-指定された初期容量で空の文字列ビルダーを作成します。
ここでは、パラメータがint
であるため、StringBuilder
クラスが到達できる最大容量は2147483647
になります。
StringBuilder
クラスのCapacityのこのコンテキストに関してはさまざまなメソッドがあり、それらのメソッドはタイプint
のパラメーターも考慮します。
void setLength(int newLength):-文字シーケンスの長さを設定します。 newLengthがlength()より小さい場合、文字シーケンスの最後の文字は切り捨てられます。 newLengthがlength()より大きい場合、文字シーケンスの最後にヌル文字が追加されます。
void sureCapacity(int minCapacity):-容量が少なくとも指定された最小値に等しいことを確認します。
これらのメソッドは、int
型の時点でも引数を取ります。したがって、これらのメソッドまたはコンストラクターを使用すると、最大容量が2147483647
のオブジェクトを生成できます。