陣列是 Java 中儲存同類型資料的固定長度容器,也是引用型別的基礎。本文系統梳理陣列的宣告語法、動態/靜態初始化、預設值、遍歷方式、記憶體佈局(堆/棧)及常見陷阱,助你建立扎實的陣列操作功力。
ArrayList。[0, length-1],越界拋 ArrayIndexOutOfBoundsException。int[] scores = new int[3]; // 長度 3,元素預設為 0
double[] rates = new double[5]; // 預設 0.0
boolean[] flags = new boolean[2]; // 預設 false
預設值速查:數值型 0/0.0、char '\u0000'、boolean false、引用型 null。
// 簡寫形式(僅限宣告時)
int[] scores = {80, 90, 75};
// 完整形式(可用於賦值語句)
int[] scores = new int[] {80, 90, 75};
⚠️ 不可混用:new int[3] {1,2,3} 編譯錯誤。
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
for (int item : arr) {
System.out.println(item);
}
迴圈變數型別需 ≥ 元素型別(int 陣列可用 long 接收,不可用 byte)。
Arrays.toString() 快速除錯System.out.println(Arrays.toString(arr)); // 輸出:[80, 90, 75]
傳遞陣列實為傳遞引用,方法內修改元素會影響原陣列;若重新指派參數變數(arr = new int[5]),則不影響外部引用。
public static void modify(int[] arr) {
arr[0] = 99; // 影響原陣列
arr = new int[3]; // 僅改變區域引用,外部無感
}
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) max = arr[i];
}
return max;
}
public static double getAverage(int[] arr) {
long sum = 0;
for (int v : arr) sum += v;
return (double) sum / arr.length;
}
[v1, v2, ...]public static void printArray(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + (i == arr.length - 1 ? "]" : ", "));
}
System.out.println();
}
int[] empty = {} 或 new int[0],合法但無元素,存取會越界。Arrays.copyOf 或手動迴圈),原陣列長度不可變。int[][] matrix = new int[3][4];每行長度可不同(鋸齒陣列)。public static final 陣列:引用不可變,但元素可被任意修改,存在安全隱患。int[] a = new int[3]; // 堆開闢新空間,地址 0x100
int[] b = new int[3]; // 堆開闢另一空間,地址 0x200
int[] c = a; // c 指向 0x100,修改 c[0] 影響 a
只要執行 new,必在堆開闢新記憶體;直接賦值陣列變數則共享同一堆空間。
陣列是 Java 資料結構的基石,掌握其初始化、遍歷、記憶體語義與常見演算法,能應對 80% 的資料處理場景。進階學習建議:深入 Arrays、Collections 工具類,並對比 ArrayList、LinkedList 的動態擴容機制。