StringBuilder构造函数实现容易受到异常的影响

时间:2017-05-31 04:56:21

标签: java stringbuilder

使用现有String或CharSequence初始化时StringBuilder的初始容量是text + 16构造函数中代码中原始StringBuilder的长度:

super(str.length() + 16);

我的查询如果原始长度接近Integer.MAX_VALUE

它会抛出NegativeArraySizeException还是会将int更改为long以便正确执行?

3 个答案:

答案 0 :(得分:1)

NegativeArraySizeException预计在这里:

  1. 根据String实施,String在内部使用char[]来保存各个字符。因此,最大字符串长度实际上取决于char[]大小。
  2. Java内部使用int (not Integer)来索引数组的各个位置,因此String的最大长度可以是Integer.MAX_VALUE,任何大于该值的东西都应该抛出异常{ {1}}将无法为超过最大JVM值的各个位置编制索引。
  3. 由于这个约束,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