内存中Java数组是什么样的?
Java中的数组存储这两者中的一个:原始的数值,或者引用。
当使用"new"创建一个对象之后,在堆上被分配内存并且返回一个引用,对于数组也是如此,因为数组就是对象。
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被调用时,一个新的帧(1号帧)入栈,并且本地变量在1号帧中被创建。
2.接下来在m1中调用m2,一个新的帧(2号帧)入栈,在m2里,堆中class A的一个新的对象被创建,并且它的引用被放入2号帧,现在这个时候,栈和堆看起来就像下面这样:
数组和对象存储方式是一样的,所以数组在内存中是直线向前的。
原文出处:http://www.programcreek.com/java-tutorials/
译文出处:http://www.cnblogs.com/hellovenus/
以上是 内存中Java数组是什么样的? 的全部内容, 来源链接: utcz.com/z/393501.html