当我们使用空花括号分配数组时,内存中到底发生了什么?

时间:2015-03-17 14:07:53

标签: java arrays memory heap

如果我们调用length

,以下两个示例都返回0
int[][] b = {};

int[] a = {};

我认为像往常一样在堆上分配两个对象:我想在第二种情况下,分配了int[]类型的对象(空数组),但在第一种情况下?

在这些情况下,究竟发生了什么?

2 个答案:

答案 0 :(得分:2)

二维数组是数组数组,所有数组都是对象本身。因此引擎编译器将进行相同的newarray调用,但略有不同。

Java代码:

public static void main(String[] args) {
    int[][] b = {};
    int[] a = {};
}

字节代码:

stack=1, locals=3, args_size=1
   0: iconst_0
   1: anewarray     #19    // [][] . array of arrays --[I
   4: astore_1
   5: iconst_0
   6: newarray       int   //[] array of int
   8: astore_2
   9: return

答案 1 :(得分:1)

int[] a = {};相当于int[] a = new int[0];

int[][] b = {};相当于int[][] b = new int[0][];