我知道类似的问题已被问过几次并且很好地回答了但是......它们是关于1维的零长度数组,如:
int[] array = new int[0];
Run Code Online (Sandbox Code Playgroud)
似乎在不应该/不能使用null的情况下存在这种数组的目的.但是为什么Java允许创建这样的东西:
int[][][] multiDims = new int[5][0][9];
Run Code Online (Sandbox Code Playgroud)
当然,就像在简单的1D情况下,如果我们尝试迭代或某些东西,我们从这样的数组中得不到任何东西,我只是因为它看起来对我来说非常讨厌.:-)为这样一个毫无意义的生物分配了多少内存?
Jir*_*sek 31
至于为什么Java允许这样做 - 从语言的角度来看(不是你试图用它表达的概念),为什么要特别禁止这个呢?如果允许任何类型的零长度数组,为什么要特别禁止零长度数组int[9]?禁止它将需要更多的编译器检查来强制执行基本无用的规则,因为即使没有规则,行为也是明确定义的.
底线,编译器检查不是为了确保您的程序有意义.他们只是在这里检查它是明确的.
编辑添加:
正如评论中指出的那样,这种检查甚至不可能,因为数组长度不是类型信息的一部分,可以在运行时给出.因此,除了int[0]直接在源代码中的"特殊情况"之外,编译器甚至没有任何方法可以知道它是否是零长度数组.
cia*_*mej 23
这将创建6个对象 - 5个空数组和包含这些数组的数组.
为什么允许?出于与一维阵列的情况相同的原因.如果您创建这样的数组:
int[][][] multiDims = new int[p][q][r];
Run Code Online (Sandbox Code Playgroud)
其中每一个p,q并且r可有时候0,处理这些特殊情况将是非常困难的.相反,你得到一个合法的对象,可以在一个循环中使用(一个非常短的循环 - 一个立即结束但没有错误的循环).
在[5]实际执行一些:最外面的阵列将具有长度为0个元件的阵列.
但你是对的[9].它没有做任何事情:由于所有五个中间数组都是空的,因此不会创建长度为9的数组.可以将任何整数放在那里以达到完全相同的效果.
可以设计该语言,以便如果有一个级别的嵌套数组,其中维度设置为文字0,那么所有后续级别也必须设置为文字0.但这将在规范和实施中创造另一个特殊情况,其好处将非常小.
| 归档时间: |
|
| 查看次数: |
2110 次 |
| 最近记录: |