数组在内存中是什么样的?

来源:互联网 发布:编程submit是什么意思 编辑:程序博客网 时间:2024/06/09 13:48

原文链接:What does a Java array look like in memory?

Java中的数组要么存储基本数据的值(int,char,…)要么存储引用(又名指针),二选其一。
当一个对象通过使用“new”创建时,就会在堆中分配内存并返回一个引用。这对于数组而言是一样的,因为数组也是对象。
1.一维数组
int arr[] = new int[3];
int[] arr仅仅是指向三个整数的数组的一个引用。如果你创建一个十个整数的数组,也是一样——指定一个数组并返回一个引用。

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)被压入栈中,然后,局部变量i也在Frame-1中创建。
2.m2()在m1()中被调用,另一外新的框(Frame-2)被压入栈中。在m2中,在堆中创建了A类的一个对象,然后它的引用变量被放到Frame-2中。现在,这时候栈和堆看起来就像下面这样:
数组就像对象一样,以同样的方式被处理,因此数组如何在内存中存入就非常简单了。

0 0
原创粉丝点击