數(shù)組在java中用來存儲基礎類型(int char float等)或引用。
當一個對象通過new創(chuàng)建時候,在堆中一塊內存區(qū)域被分配,它的引用被返回。這個規(guī)則對數(shù)組也適用,因為數(shù)組在java中也是對象。
1.單維數(shù)組
int arr [] = new int[3]l
int[] arr 只是對三個整數(shù)數(shù)組的引用。如果你創(chuàng)建一個10個int類型的數(shù)組,是相同的,同樣一個數(shù)組被分配,它的引用被返回。
數(shù)組內存分配
2.二維數(shù)組
那么二維數(shù)組怎么樣那,實際上,我們在Java中只存在一維數(shù)組,二維數(shù)組只是數(shù)組的一維數(shù)組。
int[ ][ ] arr = new int[3][ ];
arr[0] = new int[3];
arr[1] = new int[5];
arr[2] = new int[4];
二維數(shù)組
多維數(shù)組和上圖類似。
它們存儲在內存的什么位置
數(shù)組也是Java中的對象,所以內存中的什么樣的對象表示數(shù)組那?
我們知道JVM運行的數(shù)據(jù)區(qū)域包括堆,JVM堆棧。通過一個簡單的例子我們來看看數(shù)組以及其引用的存儲位置。
class A {
int x;
int y;
}
...
public void m1() {
int i = 0;
m2();
}
public void m2() {
A a = new A();
}
...
當我們如上聲明后,讓我們調用m1()來看看發(fā)生了什么?
1、當m1被調用的時候,新的frame(Frame-1)被push進棧中,本地變量i同樣被在frame-1中創(chuàng)建。
2、當m2在m1中被調用的時候,另外一個frame(frame-2)被push進棧中。
在m2中,一個叫classA的對象被在堆中創(chuàng)建,引用a被put進frame2中。現(xiàn)在,棧和堆如下圖所示:
image.png
數(shù)組和對象類似,也是在內存中直接創(chuàng)建的。