数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。
实际的数组元素被存储在堆内存中;数组引用变量是一个引用类型的变量,被存储在栈内存中。
堆内存与栈内存的差别:
当一个方法执行时,每个方法都会建立自己的内存栈,方法内定义的变量将会逐个放入栈内存中,当方法执行结束时,内存栈就会被销毁。
而当一个对象被创建时(非匿名内部类),这个对象将被保存到运行时数据区中,以便反复利用,该运行时数据区就是堆内存中。堆内存中数据不会随方法结束而销毁,一般是在没有任何引用变量引用该对象时,由系统垃圾回收机制回收。
从数组底层的运行机制来看,Java中是没有多维数组的。只是其数组类型可以是引用类型(此时其在堆内存中),引用可以指向真实的数组内存,因此看起来很像多维数组。