Java是否支持大小超过2^31-1的数组?代码报错解析
问题解答
1. 为什么max+1会变成负数?
当max是int类型的最大值2147483647时,执行max+1会触发整数溢出。
Java里int是32位有符号整数,采用补码存储。当数值达到2^31-1(即2147483647)后再加1,会超出int的取值范围,此时会按照补码规则循环到int的最小值-2^31(即-2147483648)。所以你传入数组构造器的大小参数变成了负数,直接触发NegativeArraySizeException。
2. Java是否支持大小超过2^31-1的数组?
不支持。不管是int[]还是long[],Java数组的长度在底层是用int类型限制的——数组的length属性本身就是int类型,创建数组时指定的大小参数最终也会被转换为int类型。哪怕用long类型变量作为数组大小,当数值超过2^31-1时,要么会溢出转成负数(和之前的情况一致),要么直接编译报错,根本无法创建长度超过2147483647的数组。
内容的提问来源于stack exchange,提问作者Aditya Sharma
相关产品推荐
相关产品推荐

