为什么我可以在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循环会一直抛出NullPointerException
s。所有这一切,使用new int[0][5]
而不是new int[0][]
是奇怪的。我不认为它值得语法错误,但我认为它值得IDE中的一个:
以上是关于为什么我可以在java中创建一个包含0行但是5列的二维数组?的主要内容,如果未能解决你的问题,请参考以下文章