Java 这个三维数组中有多少个引用?

Java 这个三维数组中有多少个引用?,java,arrays,Java,Arrays,假设以下数组 int myarray [][][] = new int [12][12][3]; 此数组声明生成了多少个引用 我认为应该是12*12*3,因为数组中可以存储多少个元素 然而,我的同事认为,有12+12*12,因为“myarray”中有12个直接引用,144个引用指向第二维度到第三维度 但是,怎么会有比存储在这个数组中的实际值更少的引用呢?让我们弄清楚Java程序员所说的“引用”是什么意思。引用是指一个对象值,包括一个数组,而不是一个基本值,如int,它不引用任何其他对象——它只

假设以下数组

int myarray [][][] = new int [12][12][3];
此数组声明生成了多少个引用

我认为应该是12*12*3,因为数组中可以存储多少个元素

然而,我的同事认为,有12+12*12,因为“myarray”中有12个直接引用,144个引用指向第二维度到第三维度


但是,怎么会有比存储在这个数组中的实际值更少的引用呢?

让我们弄清楚Java程序员所说的“引用”是什么意思。引用是指一个对象值,包括一个数组,而不是一个基本值,如
int
,它不引用任何其他对象——它只是一个值。有12*12*3个值,但引用的数量不同

每个最低级别的数组中都不包含引用,因为基类型是primitive-
int
。这意味着最后一个长度3对引用的数量没有任何影响


在Java中,多维数组被实现为数组的数组。中间值12表示12个引用,每个引用指向长度为3的数组。第一个值12表示12个引用,每个引用由中间值描述的12个数组。您的同事很接近,因为这意味着此多维数组中包含的引用数为12+12*12或156。在三维数组中,12个外部引用指向12个二维数组,加上144个内部引用指向144个一维数组。包括引用
myArray
本身,即157。

如何准确定义引用?提示:单个int值不是引用。在我看来是12*12*3。在这种情况下,引用是指向数组中的值/对象的唯一指针。澄清一下:我需要它来估计给定数组的大小(假设引用需要4/8字节)。有趣的是,我假设那些原语值仍然存储在堆中?但是考虑到对[0][0]的引用,JVM如何知道原语的值确切存储在哪里?使用最低级别数组的引用和内存空间执行一些算法?因此,在数组中,对象原语值是使用常量地址模式存储的?JVM将在每个维度上跟踪数组引用。它知道
a
在哪里,因此基于
a
在哪里,它找到
a[0]
,并跟随该引用到内部数组。然后从那里可以找到
a[0][0]
。它没有指定JVM如何在堆中布局其数组内存,但它最好是连续内存。数组中存在的基元值存储在数组的堆内存中。