我在Java中定义了一个2d数组。当我读到它时(即2d数组),这个2d数组的第一个维度是一个指针(我不知道它是否正确,请告诉我它)。那么如果我把它看作指针,在64位系统中,执行后下面代码的大小是多少?
short [][] array1 = new short [10][];
short[][] array2 = new short[10][];
for (int i = 0; i < 10; i++)
array1[i] = new short[1];
for (int i = 0; i < 10; i++)
array2[i] = array1[i];
请告诉我上面代码的大小。
答案 0 :(得分:2)
对于每个一维数组,除了数组中数据的空间外,还有24字节的开销。
for
循环中,您将创建10个数组,每个数组为24 + 2 * 10 = 44个字节。它们被填充到至少8个字节的边界,因此总共占用48个字节或480个字节。 请注意,实际使用情况取决于JVM。例如:
为了看到外部和内部数组之间的区别,重写代码可能会有所帮助:
short[][] outerArray = new short[10][]; // Array of references to short arrays
short[] innerArray; // Array of shorts
for (int i = 0; i < 10; i++) {
innerArray = new short[1];
outerArray[i] = innerArray;
}