You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:40:15