数组的内存结构
java中的数组存储着两类的事物:原始值或者引用(对象指针)
当一个对象通过new关键字进行创建的时候,那么就会在堆内存中分配一段空间,并返回其相应的引用(指针)
1.一维数组
int[] arr = new int[3];
int[] arr 指向包含3个整数的数组。假设创建的是包含10个整数的数组,也是用同样的方法:分配指定大小的内存,并返回相应数组的应用
2.二维数组
二维数组又有什么区别呢?java中只有一维数组,二维数组本质也是一维数组,知识数组中的每个元素都指向了另外一个一维数组而已
int[][] arr = new int[3][]; arr[0] = new int[3]; arr[1]= new int[5]; arr[2] = new int[4];
那么同样的原理,多维数组也是如此
3.数组分配在内存的哪个区域中?
数组分配在内存的堆中。java中的数组也是对象,因此数组所在的区域和对象是一样的,我们知道JVM运行的时候,数据区包括JVM栈、堆内存以及其他的区域。
class A{ int x ; int y ; } ... public void m1(){ int i = 0 ; m2(); } public void m2(){ A a = new A(); } ....
上面代码片段中,让我们执行m1()方法看看发生了什么:
1.当m1被调用的时候,一个新的栈帧(Frame-1)被亚茹JVM栈中,当然,相关的局部变量也在Frame-1中创建,比如i;
2.然后m1调用m2,又有一个新的栈帧(Frame-2)被压入JVM栈中;m2方法在堆内存中创建了A类的一个对象,此对象的引用保存在Frame-2的局部变量a中,此时,堆内存和栈内存
而数组别当做对象进行处理了,数组存储在哪个区域中