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

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

回到顶部