Java StringBuilder构造函数实现容易发生异常

Java StringBuilder构造函数实现容易发生异常,java,stringbuilder,Java,Stringbuilder,当使用现有字符串或字符序列初始化时,StringBuilder的初始容量为StringBuilder构造函数中代码的原始text+16: super(str.length() + 16); 我的查询如果原始长度接近整数.MAX_值,该怎么办 它将抛出一个NegativeArraySizeException还是将int改为long以正确执行?它将抛出一个NegativeArraySizeException,因为整数将被环绕 实际上,这与: int len = Integer.MAX_VALUE;

当使用现有字符串或字符序列初始化时,
StringBuilder
的初始容量为
StringBuilder
构造函数中代码的原始
text+16

super(str.length() + 16);
我的查询如果原始长度接近
整数.MAX_值
,该怎么办


它将抛出一个
NegativeArraySizeException
还是将int改为long以正确执行?

它将抛出一个
NegativeArraySizeException
,因为整数将被环绕

实际上,这与:

int len = Integer.MAX_VALUE;

// here we are trying to create an array of size -2147483633
char [] value = new char[len + 16];

它将抛出NegativeArraySizeException

此处预期的
NegativeArraySizeException

  • 根据
    String
    实现,
    String
    在内部使用
    char[]
    来保存单个字符。因此,最大字符串长度实际上取决于
    char[]
    大小
  • Java内部使用
    int(非整数)
    对数组的各个位置进行索引,因此
    字符串的最大长度可以是
    整数。MAX_值
    和任何大于该值的值都会引发异常,因为
    JVM
    将无法对大于最大
    int
    值的各个位置进行索引

  • 由于此约束,对于任何扩展超出最大允许限制(在本例中为最大int值)的数组,都会引发
    NegativeArraySizeException

    为什么不试试呢?“那么,真的需要这么长的绳子吗?”CarlosHeuberger——我试着和大家分享我的答案,请检查一下Balbeer纯啤酒--aah tera account hai…(Y)