Java StringBuilder可以容纳多少个字符?

时间:2016-06-28 05:28:05

标签: java stringbuilder jdk1.6 capacity

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'有最大容量,还是可以容纳一切?

3 个答案:

答案 0 :(得分:11)

是的,它的最大整数容量有限制,2147483647(技术上)。

StringBuilder内部保存char[]对象中的字符,并且数组的大小有限制。 read more about it on other thread

答案 1 :(得分:0)

如果您使用此链接,可能会更清楚Oracle Docs String Builder Buffer Capacity

现在要声明任何StringBuilder类的容量,然后为此定义一个构造函数StringBuilder(int initCapacity)

  

StringBuilder(int initCapacity): - 创建具有指定初始容量的空字符串构建器。

此处由于参数为intStringBuilder类可达到的最大容量为2147483647

有关StringBuilder类中此容量上下文的各种方法,这些方法还会考虑int类型的参数。

  

void setLength(int newLength): - 设置字符序列的长度。如果newLength小于length(),则截断字符序列中的最后一个字符。如果newLength大于length(),则在字符序列的末尾添加空字符。

     

void ensureCapacity(int minCapacity): - 确保容量至少等于指定的最小值。

这些方法也采用int类型的参数。因此,使用这些方法或结构,您将能够生成最大容量为2147483647的对象。

答案 2 :(得分:0)

Java 9引入了JEP 254: Compact Strings。这样可以通过将字符存储在字节数组中来更有效地存储字符串。如果所有字符均为拉丁文1,则每个字符使用一个字节,否则,每个字符使用两个字节。

因此答案是:如果启用了紧凑字符串(默认设置),并且您的StringBuilder仅包含拉丁文1个字符,则最大大小为Integer.MAX_VALUE * ,否则为是Integer.MAX_VALUE / 2 *


* 或略少一些,请参见"Do Java arrays have a maximum size?"