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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我可以在java中创建一个包含0行但是5列的二维数组?相关的知识,希望对你有一定的参考价值。

int[][] a = new int[0][5];

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

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

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

答案

By the JLS,一个表示大小为零的数组表达式是有效的 - 它只是一个表达式 - 所以你可以合法地声明一个零基数的n维数组。

JLS词法分析器检查的唯一内容(从Java 8开始)是whether or not the expression evaluates to zero

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

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

另一答案

将空数组视为正常情况并不奇怪。有一个非常类似的情况,我们一直处理空数组。

List<String> names = new ArrayList<String>();

names目前是一个空阵列。总是用至少第一个元素声明数组不是很奇怪吗?

List<String> names = new ArrayList<String>(Arrays.asList("John"));

new int[0]作为有效语法的替代方法是在第一个元素不可用时将数组设置为null。在这个世界中,我们需要在迭代数组之前定期检查null

int[] nums = null; // Because empty primitive arrays are "weird"

//typical for-each loop
if(nums != null){
    for(int x: nums){
        // do something
    }
}
//typical for loop
if(nums != null){
    for(int c = 0; c < nums.length; c++){
        // do something
    }
}

没有空数组,常规for循环会一直抛出NullPointerExceptions。所有这一切,使用new int[0][5]而不是new int[0][]是奇怪的。我不认为它值得语法错误,但我认为它值得IDE中的一个:

warning light

以上是关于为什么我可以在java中创建一个包含0行但是5列的二维数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在矩阵表 PHP 中创建总计行

如何在 mySQL 中创建一个空的 VIEW

在 1 行中创建相同列的数据透视

如何在 Oracle Apex 中创建包含文件的列表

无法在包含 NULL 值的 SQL 表中创建 JSON 格式的列

如何在 Handsontable 中创建跨越两列的行标题?