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'有最大容量,还是可以容纳一切?
答案 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)
: - 创建具有指定初始容量的空字符串构建器。
此处由于参数为int
,StringBuilder
类可达到的最大容量为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?"