当我阅读此链接Java Criticism时。在大阵列部分。有两点我不明白:
Java也缺少真正的多维数组(连续分配 由单个间接访问的单个内存块),其中 限制科学和技术计算的性能
在C中,我知道多维数组只是元素的连续内存。因此,如上所述,Java中的每一行都是一个对象,多行就像多个对象一样,并且它们在内存中不是连续的,对吧?
Java因为不支持超过231的数组而受到批评 - 1(约21亿)元素......数组必须用int索引 values ...尝试访问具有长索引的数组组件 值导致编译时错误
这是否意味着,如果我们可以通过长整数访问数组组件,那么数组大小可以更大?在那种情况下,所以,这仍然限制数组的大小是长,对吗?
谢谢:)
答案 0 :(得分:3)
... Java中的每一行都是一个对象,多行就像多个对象一样,它们在内存中不是连续的,对吧?
这是正确的。 Java多维数组是一个数组数组,每个数组都表示为一个单独的对象。
这是否意味着,如果我们可以通过长整数访问数组组件,那么数组大小可以更大?
没有。 Java数组的最大大小为2 ^ 31 - 1个元素。
JLS在JLS 10.4处说明了这一点:
“数组必须用int值索引; short,byte或char值也可以用作索引值,因为它们需要进行一元数字提升(第5.6.1节)并成为int值。
尝试访问具有长索引值的数组组件会导致编译时错误。“
简而言之,您链接到的页面正确,指出Java不适合需要使用非常大的数组的应用程序。 (可以解决这些限制,但如果不将基础数组表示作为对象包装,则无法干净地执行此操作。这会影响性能,并且意味着您无法使用[...]
语法进行索引。)