String底层是char数组来实现的,ArrayList底层也是数组实现的。所谓数组,是相同数据类型的元素按一定顺序排列的集合。看如下代码:
1 | public static void main(String[] args){ |
编译后打开class文件,反编译如下:
1 | public static void main(String[] args){ |
三种数组的声明方式编译后,最后创建的方式都是一样的,都加了new关键字,还把charArr3的声明与赋值一体化了。
Object类有的方法数组都有,它还多了一个length属性(注意不是方法)。在Java层面,我们完全可以把数组当成对象来看待,下图模拟数组在堆内存中的大致的样子,每一个数组都是按顺序排列在堆内存中,正因为如此,我们可以通过数组+[下标]的方式来直接访问数组里的元素。
再来看二维数组:
1 | public static void main(String[] args){ |
这里还是用了三种方式去声明,反编译class文件,虽然有点差别,但还是大同小异,都加了new关键字(这次没有把z数组和赋值一体化)。
1 | public static void main(String[] args){ |
二维数组,其实就是二级数组而已。下图中只画出了数组x:
参考资料:
清浅池塘 Java中的数组