N个元素的一维数组是否需要与2D [m] [n]相同的存储量,m*n = N.

ale*_*er1 4 java arrays

这是关于Java中内存分配的问题.

假设我有一个整数A [100]和另一个整数B [10] [10]的数组.他们在Java中需要相同数量的内存还是不同?如果是后者,有什么区别以及它如何与N一起成长?

我在这里只谈到Ns是正数2的幂,所以我们在这里谈论方形2D阵列及其可能的1D表示.

Tur*_*g85 9

绝对没有.

在C/C++中,2D阵列在"一个块"中为2D阵列分配所有内存.

在Java中,2D阵列是"阵列阵列".一维数组被分配在一个块中,但是一维数组可以是分散的.此外,"外部"数组(第二维)也需要堆内存,存储对1D阵列的引用.

因此,如果您分配维度m(外部)和n(内部)的2D数组,Java将创建一个m元素m数组和n每个元素数组.外部数组只存储对m内部数组的引用.

这个页面给出了Java中多维数组的一个很好的解释和可视化.