9.3 JAVA數(shù)組在內存中是什么樣子

數(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)建的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,759評論 18 399
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,360評論 11 349
  • Java byte code 的學習意義 為啥要學java bytecode,這就跟你問我已經(jīng)會python了為...
    shanggl閱讀 1,694評論 0 3
  • 我是一個三線城市的青年,在一次很偶然的情況下知道了簡書,在里面看到了好多牛人,比如彭小六、剽悍一只貓、無戒等等,他...
    馬爾代夫的驢閱讀 617評論 4 8
  • 人最多的地方是地鐵,最寂寞的人是地鐵里的乘客。 ----作者按 一個人最好的陪伴是什么?當然是自己。 如果說人最好...
    陳川Lethe閱讀 393評論 2 0