数组在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];
多维数组和上图类似。
它们存储在内存的什么位置
数组也是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中。现在,栈和堆如下图所示:
数组和对象类似,也是在内存中直接创建的。