9.3 JAVA数组在内存中是什么样子

数组在java中用来存储基础类型(int char float等)或引用。
当一个对象通过new创建时候,在堆中一块内存区域被分配,它的引用被返回。这个规则对数组也适用,因为数组在java中也是对象。

1.单维数组

int arr [] = new int[3]l

int[] arr 只是对三个整数数组的引用。如果你创建一个10个int类型的数组,是相同的,同样一个数组被分配,它的引用被返回。

数组内存分配

2.二维数组

那么二维数组怎么样那,实际上,我们在Java中只存在一维数组,二维数组只是数组的一维数组。

int[ ][ ] arr = new int[3][ ];
arr[0] = new int[3];
arr[1] = new int[5];
arr[2] = new int[4];
9.3 JAVA数组在内存中是什么样子_第1张图片
二维数组

多维数组和上图类似。

它们存储在内存的什么位置

数组也是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(Frame-1)被push进栈中,本地变量i同样被在frame-1中创建。
2、当m2在m1中被调用的时候,另外一个frame(frame-2)被push进栈中。
在m2中,一个叫classA的对象被在堆中创建,引用a被put进frame2中。现在,栈和堆如下图所示:

9.3 JAVA数组在内存中是什么样子_第2张图片
image.png

数组和对象类似,也是在内存中直接创建的。

你可能感兴趣的:(9.3 JAVA数组在内存中是什么样子)