群内一位培训老师发出来一个问题:
int[][] a = new int[10][10];
这种多维数组会在栈上生成几个对象?
这个问题新鲜,没人问过.
发出来后 大家都认为有几个元素 就会生成几个对象.
我开始也 这么认为. 于是写个了程序试了下.发现没有那么简单
根据class生成JVM指令:
javap是不骗人的.明明白白的写着Stack=2,一看这结果,不明不白,再做几个例子看下
对应JVM源码:
又试了几个 发现 数组有几维,就占用几个栈
再试一下赋值与读值
对应JVM源码:
我对JVM作了简单注释
由此可以看出
要想对一个多维数组赋值
要先一级一级的找出对应的内存引用地址
用高级语言的实现就类似于:
读取数组里的值也跟赋值类似
int x = a[9][16][17][18]对应的JVM代码是
这样分析是不是很明了了!
最后总结一下:
N维数组,在栈上就占有N个对象
数组的读写都是从1维数组开始根据内存引用来向后查找,类似一个链表结构
大家有问题多拍砖,多交流多讨论,不要骂人