javac
允许以下语法,
int[][][] i = new int[4][0][2];
其长度索引为零,可防止超出范围的访问。
1) 无法访问三维。零长度维度作为最后一个维度(int[][][] i = new int[4][2][0];
)看起来不错。
2) 不可能为长度为零的多维数组编写初始化程序,除非该维度是最后一个(例如 int[2][3][0]
)。
为什么java允许这样的语法?
注意:这个问题与int[0]
最佳答案
因为nothing in the multianewarray
bytecode instruction prevents you from doing so .
确实没有比这更好的答案了...事实是,对于任何 X
,即使 X
是一个原语,那么 X[]
是一个类,X[][]
是一个类,依此类推;您可以自由选择数组的“尺寸”。
请注意声明 X[n][]
和 X[n][m]
数组的不同之处:在第一个数组中,您将声明一个
而在第二个中,您将声明 X[]
的 anewarrayX
的 multianewarray
。
当然,在 X[m][n][p]
中,如果 n
为0,但是...好吧,程序员知道他在做什么,对吗?
这只是 JVM 中数组的另一个怪异之处...除了“它可能发生”之外别想太多;)
关于java - 为什么java允许零长度索引(在中间)数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31384211/