java - 为什么java允许零长度索引(在中间)数组?

标签 java arrays

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[] 的 anewarray 而在第二个中,您将声明 Xmultianewarray

当然,在 X[m][n][p] 中,如果 n 为0,但是...好吧,程序员知道他在做什么,对吗?

这只是 JVM 中数组的另一个怪异之处...除了“它可能发生”之外别想太多;)

关于java - 为什么java允许零长度索引(在中间)数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31384211/

相关文章:

java - 连接两个(或多个)wav-sound的byte []。产生背景噪声

java - 在 Apache Wicket 中使用 ajax 处理单个输入字段

C++ 指针与数组的 [] 运算符比较?

java - 我正在比较来自 2 个独立数组的 2 组整数值

arrays - 如何使用 Mongoose 从子文档数组中检索特定字段

Java 推断泛型类型

java - byte[] 输入流转换为字符串

关闭和重新打开串行连接时的 Java Comms PortInUseException

c# - 将对象的数组编号传递给事件处理程序

python - 匹配两个列表之间的相似元素