Java中數組表示1(一維數組的定義、初始化和內存中數組的表示)

各個語言中都有數組,但Java中是有區別的,Java中只有一維數組,沒有多維數組,多維數組使用數組的數組來表示的。所以下面介紹的數組主要以一維數組來表示


1.數組的定義

數組類型也是一種類型,本身是一種引用類型,例如int是一個基本數據類型,但是int[]就是一種引用數據類型。其定義方式有兩種,分別爲:

  • 類型 數組名[];   如:String  arrayName1[];    int arrayName2[];
  • 類型[] 數組名;   如:String[]  arrayName1;    int[] arrayName2;

推薦使用第二種聲明方式,因爲第二種聲明方式具有更好的可讀性,對於int[] arrayName方式,很容易可以理解成:定義一個變量arrayName,類型爲int[]。


2.數組的初始化

Java在數組聲明時並不爲數組分配存儲空間(不同於其它高級語言),僅有數組聲明,而未分配存儲空間。Java語言中數組必須先初始化,然後纔可以使用。初始化包括數組的內存分配和對數組元素賦初始值。

Java數組的初始化分爲兩種方式:

  • 靜態初始化:數組定義與數組元素的空間分配和賦值操作同時進行。
  • 動態初始化:數組定義與數組元素的空間分配和賦值操作分開進行。

2.1 靜態初始化

數組初始化是指在聲明數組的同時指定數組元素的初始值。

語法格式如下:arrayName = new type[] {element1, element2, …};

例如:

int[] intArray = new int[]{1, 2, 3, 4, 5};
double[] decArray = new double[]{1.1, 2.2, 3.3};
String[] strArray = new String[]{"Java", "Android", "FORTRAN"};

靜態初始化還有一種簡化的數據形式(比上面的方式用的更廣泛):

int[] intArray = {1, 2, 3, 4, 5};
double[] decArray = {1.1, 2.2, 3.3};
String[] strArray = {"Java","Android","FORTRAN"};
注意:如下幾種數組初始化方式是不允許的:

int[] intArray = new int[5]{1, 2, 3, 4, 5}; //錯誤
int[5] intArray = new int[]{1, 2, 3, 4, 5}; //錯誤
int[5] intArray = {1, 2, 3, 4, 5}; //錯誤
數組的長度由程序自動計算,不需要我們手動寫。

2.2 動態初始化

爲已聲明數組(類型  數組名[ ])動態分配空間的一般形式如下:

arrayName = new type[arrayLength];

注:數組大小也稱爲數組的長度,可以爲整型常量或變量。

例如:

int[] value1;
value1=new int[10];
int[] value2=new int[10]; //聲明數組的同時,用new運算符爲數組分配空間
// int[10] value3 = new int[10];  //錯誤

2.3 一維數組的訪問

一維數組的訪問語法如下:

語法:數組[下標]   下標是從0開始的。

int[ ] a = new int[4];
a[0] = 20; //訪問數組元素並賦值
a[1] = a[0] + 10; 
其示意圖如下:


注意:訪問其他元素會產生數組越界錯誤,會出現異常:ArrayIndexOutOfBoundsException,如訪問a[4]


3.數組的內存表示

爲數組分配空間有兩種方法:數組初始化使用new運算符;爲數組分配空間後,數組變量指向數組存儲空間的引用地址。其內存分配的過程如下:

首先,在int i這句話運行完後,在棧(Stack)空間中新建了一個int類型的空間,名稱爲i,如下:

其次,運行完int[] a這句話之後,只是在佔空間中定義了一個int[] 類型的數組,名稱爲a,如下:

在運行完a=new int[4]後,這樣纔算在堆(Heap)內存中新建了一個長度爲4個int類型數組,如下:

在運行完for循環後,數組的值也進行了重新賦值,如下:





全文完。轉載請註明出處。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章