歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java數組及其內存分配

Java數組及其內存分配

日期:2017/3/1 9:59:38   编辑:Linux編程

幾乎所有的程序設計語言都支持數組。Java也不例外。當我們需要多個類型相同的變量的時候,就考慮定義一個數組。在Java中,數組變量是引用類型的變量,同時因為Java是典型的靜態語言,因此它的數組也是靜態的,所以想要使用就必須先初始化(為數組對象的元素分配空間)。

1.數組的初始化方式及其內存分配

對於Java數組的初始化,有以下兩種方式,這也是面試中經常考到的經典題目:

  1. 靜態初始化:初始化時由程序員顯式指定每個數組元素的初始值,由系統決定數組長度,如:
    1 //只是指定初始值,並沒有指定數組的長度,但是系統為自動決定該數組的長度為4
    2 String[] computers = {"Dell", "Lenovo", "Apple", "Acer"};  //①
    3 //只是指定初始值,並沒有指定數組的長度,但是系統為自動決定該數組的長度為3
    4 String[] names = new String[]{"多啦A夢", "大雄", "靜香"};  //②
  2. 動態初始化:初始化時由程序員顯示的指定數組的長度,由系統為數據每個元素分配初始值,如:
    1 //只是指定了數組的長度,並沒有顯示的為數組指定初始值,但是系統會默認給數組數組元素分配初始值為null
    2 String[] cars = new String[4];  //③

前面提到,因為Java數組變量是引用類型的變量,所以上述幾行初始化語句執行後,三個數組在內存中的分配情況如下圖所示:

由上圖可知,靜態初始化方式,程序員雖然沒有指定數組長度,但是系統已經自動幫我們給分配了,而動態初始化方式,程序員雖然沒有顯示的指定初始化值,但是因為Java數組是引用類型的變量,所以系統也為每個元素分配了初始化值null,當然不同類型的初始化值也是不一樣的,假設是基本類型int類型,那麼為系統分配的初始化值也是對應的默認值0。

對於多維數組,假設有這麼一段代碼:

1 int[][] nums = new int[2][2];2 nums[0][1] = 2;

那麼他在內存中的分配情況如下:

由上圖可知,並沒有真正的多維數組,它的本質其實是一維數組。

Copyright © Linux教程網 All Rights Reserved