web-dev-qa-db-ja.com

Java StringBuilderは何文字を保持できますか?

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」には最大容量がありますか、それともすべてを保持できますか?

8
Narendra Rawat

はい、2147483647(技術的に)の最大整数の容量に制限があります。

StringBuilderは内部的に文字を保持します char[] オブジェクトであり、配列にはサイズの制限があります。 他のスレッドで詳細を読む

11

Java 9が導入されました JEP 254:コンパクト文字列 。これにより、文字をバイト配列に格納することで、文字列をよりスペース効率よく格納できます。すべての文字がラテン1の場合、1文字あたり1バイトが使用されます。それ以外の場合は、1文字あたり2バイトが使用されます。

したがって、答えは次のとおりです。コンパクト文字列が有効になっていて(デフォルト)、StringBuilderにラテン語の1文字のみが含まれている場合、最大サイズはInteger.MAX_VALUEです。*、それ以外の場合はInteger.MAX_VALUE / 2です*


* または少し少ないですが、 "Do Java配列には最大サイズがありますか?" を参照してください。

0
Marcono1234

このリンクをたどると、さらにクリアになる可能性があります 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のオブジェクトを生成できます。

0
Vikrant Kashyap