使用现有String或CharSequence初始化时StringBuilder
的初始容量是text + 16
构造函数中代码中原始StringBuilder
的长度:
super(str.length() + 16);
我的查询如果原始长度接近Integer.MAX_VALUE
?
它会抛出NegativeArraySizeException
还是会将int更改为long以便正确执行?
答案 0 :(得分:1)
NegativeArraySizeException
预计在这里:
String
实施,String
在内部使用char[]
来保存各个字符。因此,最大字符串长度实际上取决于char[]
大小。 int (not Integer)
来索引数组的各个位置,因此String
的最大长度可以是Integer.MAX_VALUE
,任何大于该值的东西都应该抛出异常{ {1}}将无法为超过最大JVM
值的各个位置编制索引。由于这个约束,int
被抛出超出最大允许限制的数组,在这种情况下是max int value。
答案 1 :(得分:0)
它将抛出一个NegativeArraySizeException
,因为整数将会缠绕。
实际上,它与:
相同int len = Integer.MAX_VALUE;
// here we are trying to create an array of size -2147483633
char [] value = new char[len + 16];
答案 2 :(得分:0)
它将抛出NegativeArraySizeException