繁体   English   中英

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

[英]What exactly happens in memory when we allocate an array using an empty curly braces?

如果我们调用length ,以下两个示例都返回 0:

int[][] b = {};

或者

int[] a = {};

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

在这些情况下到底发生了什么?

二维数组是数组的数组,所有数组本身都是对象 因此,newarray编译器将进行相同的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

int[] a = {}; 等价于int[] a = new int[0];

int[][] b = {}; 等价于int[][] b = new int[0][];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM