java
runtime_error
ai_generated
true
java.lang.NegativeArraySizeException
ID: java/negative-array-size
87%修复率
81%置信度
1证据数
2024-06-12首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| Java 8 | active | — | — | — |
| Java 11 | active | — | — | — |
| Java 17 | active | — | — | — |
| Java 21 | active | — | — | — |
根因分析
当使用负数大小创建数组时抛出,通常是由于整数溢出或数组大小计算错误。
English
Thrown when an array is created with a negative size, usually due to an integer overflow or a bug in array size calculation.
官方文档
https://docs.oracle.com/javase/8/docs/api/java/lang/NegativeArraySizeException.html解决方案
-
Validate the array size before creation: `if (size < 0) throw new IllegalArgumentException("Size must be non-negative: " + size);`. -
Use long arithmetic for size calculation to prevent integer overflow: `long safeSize = (long) a * b; if (safeSize > Integer.MAX_VALUE) throw new IllegalArgumentException("Size too large");`. -
Add a guard clause: `int size = computeSize(); if (size < 0) { size = 0; }` to handle edge cases gracefully.
无效尝试
常见但无效的做法:
-
95% 失败
The root cause (negative size) is not fixed; retrying will throw the same exception.
-
70% 失败
This masks the underlying bug and may lead to incorrect program behavior or data loss.
-
80% 失败
If the size is Integer.MIN_VALUE, Math.abs() returns a negative value due to overflow, still causing the exception.