为什么我可以在java中创建一个包含0行但是5列的二维数组?

Ziy*_*ang 6 java arrays initialization

int[][] a = new int[0][5];
Run Code Online (Sandbox Code Playgroud)

为什么上面的代码在java中有效?

这个2d阵列几乎没用,因为第一个维度是ZERO.从逻辑上讲,如果第一个维度为0,则第二个维度不应大于0.

我知道我们可以启动1d空数组.

Mak*_*oto 6

通过JLS,表示大小为零的数组表达式是有效的 - 它只是一个表达式 - 因此您可以合法地声明一个零基数的n维数组.

JLS词法分析器检查的唯一内容(从Java 8开始)是表达式是否计算为零:

接下来,检查维度表达式的值.如果任何DimExpr表达式的值小于零,则抛出NegativeArraySizeException.

这没有说明它的用处,因为我相信你知道,任何索引到这个数组的尝试都会产生一个ArrayIndexOutOfBoundsException因为你的索引位置从零开始.