Java陣列型別


陣列是什麼?

陣列是一個固定長度的資料結構,用於儲存多個相同資料型別的值。在資料型別之後或在變數宣告中的變數名稱之後放置[],使變數成為陣列。

例如,

int myID;

上面是一個簡單的變數宣告。 這裡,int是資料型別,myID是變數名。

陣列宣告

上面的這個宣告意味著myID變數可以儲存一個整數值。如果要宣告陣列,可在上面的宣告中的資料型別之後放置[],如下所示 -

int[] myID;

使myID是一個陣列變數。上面的宣告應叫作「myID是一個int陣列」。可以通過在變數名之後放置[]來使myID變數成為一個陣列,像這樣:

int myID[];

上述兩個宣告都是有效的。
不能在宣告陣列時指定陣列可以儲存的值的數量。可以宣告一個陣列來儲存同資料型別的多個值。 以下是其它形式的陣列宣告範例:

// salary can  hold  multiple float  values 
float[] salary;

// name can  hold  multiple references to String objects
String[]  name;

// emp can  hold  multiple references to Employee objects
Employee[]   emp;

建立陣列

陣列建立的一般語法如下:

以下程式碼建立Arraylength長度型別為ArrayDataType的陣列物件

new ArrayDataType[Arraylength];

要建立一個陣列來儲存5int型別的值:

new int[5];

在此表示式中,5是陣列的長度,它也稱為陣列的維度。有多個維度的陣列稱為多維陣列。還可以將陣列的宣告及其建立在一個語句中組合。

int[] myID = new int[5];

因為所有陣列都是物件,所以它們的參照可以分配給物件型別的參照變數。 例如,

int[] myID = new int[5]; // Create an  array object
Object obj  = myID;              // A  valid  assignment

顯式陣列初始化

當宣告陣列或使用new運算子建立陣列物件時,可以顯式初始化陣列的元素。元素的初始值由逗號分隔,並用大括號{}括起來。

// Initialize the array at the time of declaration 
int[] myID = {1, 2, 3, 4, 5};

此程式碼建立長度為5的int陣列,並將其元素初始化為12345。陣列的長度與陣列初始化列表中指定的值的數量相同。逗號跟隨初始化列表中每個值直到最後一個值。

// A  comma   after the   last  value 5  is valid.
int[] myID = {1, 2, 3, 4, 5, };

或者,可以初始化陣列的元素,如下所示:

int[] myID = new int[]{1, 2, 3, 4, 5};

對於參照型別陣列,可以指定初始化列表中的物件列表。以下程式碼說明了String的陣列初始化。

String[] names = {new String("A"), new String("B")};

String[] names = {"C",  "D"};

增強for迴圈陣列

可以使用for-each迴圈與陣列。語法如下:

for(DataType e  : array)  {

}

以下程式碼使用for-each迴圈列印int陣列的所有元素:

int[] numlist = {1, 2, 3};
for(int num : numlist)  { 
   System.out.println(num);
}

可以使用基本的for迴圈完成同樣的事情,如下:

int[] numlist = {1, 2, 3};
for(int i = 0; i < numlist.length; i++) { 
   int num = numlist[i]; 
   System.out.println(num);
}

陣列物件的類

陣列是物件。Object類中的getClass()方法返回類的參照。
以下程式碼說明如何獲取陣列的類名。

public class Main {
  public static void main(String[] args) {
    int[] iArr = new int[1];
    int[][] iiArr = new int[1][1];
    int[][][] iiiArr = new int[1][1][1];

    String[] sArr = { "A", "B" };
    String[][] ssArr = { { "A" }, { "B" } };
    String[][][] sssArr = {}; // A 3D empty array of string

    // Print the class name for all arrays
    System.out.println("int[]:" + getClassName(iArr));
    System.out.println("int[][]:" + getClassName(iiArr));
    System.out.println("int[][][]:" + getClassName(iiiArr));
    System.out.println("String[]:" + getClassName(sArr));
    System.out.println("String[][]:" + getClassName(ssArr));
    System.out.println("String[][][]:" + getClassName(sssArr));
  }
  public static String getClassName(Object obj) {
    Class c = obj.getClass();
    String className = c.getName();
    return className;
  }
}

上面的程式碼生成以下結果。

int[]:[I
int[][]:[[I
int[][][]:[[[I
String[]:[Ljava.lang.String;
String[][]:[[Ljava.lang.String;
String[][][]:[[[Ljava.lang.String;

陣列的類名以左中括號[開頭。左括號的數量等於陣列的維數。