陣列是 Java 最基礎的容器結構。本文系統整理 **一維/多維陣列宣告語法、動態建立、靜態/動態/預設值初始化三種模式、陣列複製與陷阱**,附完整可編譯範例,適合初學者建立完整知識骨架與資深開發者快速查閱。
// 兩種風格均合法,推薦風格 1(類型與名稱分離)
int[] scores; // 風格 1:類型包含 []
int scores2[]; // 風格 2:C 風格,不推薦
String[] names; // 參考型別陣列
注意: 宣告時**不可指定長度**(int[5] arr; 編譯錯誤)。
scores = new int[5]; // 指定長度,元素自動獲取預設值
names = new String[3]; // 參考型別預設值為 null
int[][] matrix = new int[3][4]; // 多維陣列:3 行 4 列
int[][] ragged = new int[3][]; // 齒狀陣列:每行長度可不同
ragged[0] = new int[2];
ragged[1] = new int[5];
ragged[2] = new int[1];
int[] a = new int[3]; // [0, 0, 0]
String[] s = new String[2]; // [null, null]
| 型別類別 | 預設值 |
|---|---|
| 整數型 | 0 |
| 浮點型 | 0.0 |
| boolean | false |
| char | '\u0000' |
| 參考型別 | null |
int[] a = new int[3];
a[0] = 10; a[1] = 20; a[2] = 30;
// 或配合迴圈
for (int i = 0; i < a.length; i++) a[i] = i * 10;
int[] a = {10, 20, 30}; // 類型推斷
String[] names = {"Alice", "Bob", "Carol"};
int[][] matrix = {{1,2}, {3,4,5}, {6}}; // 多維/齒狀靜態初始化
int[] src = {1,2,3};
// 1. 浅複製:參考傳遞
int[] ref = src; // 修改 ref 影響 src
// 2. 深複製:內容複製
int[] clone = src.clone(); // 內建 clone()
int[] copy = Arrays.copyOf(src, src.length); // 指定長度
int[] copyRange = Arrays.copyOfRange(src, 0, 2); // 區間 [0,2)
// 3. 多維陣列深複製需遞歸
int[][] src2 = {{1,2}, {3,4}};
int[][] deep = new int[src2.length][];
for (int i = 0; i < src2.length; i++) deep[i] = src2[i].clone();
int[] a = {5,2,8,1};
Arrays.sort(a); // 升序排序 [1,2,5,8]
Arrays.binarySearch(a, 5); // 二分查找,返回索引 2
Arrays.fill(a, 0); // 全部填充 0
Arrays.equals(a, b); // 內容比較
String s = Arrays.toString(a); // "[1, 2, 5, 8]" 除錯神器
new T[10](類型擦除),改用 List<T> 或 @SuppressWarnings("unchecked") T[] arr = (T[]) new Object[size]。String[] 是 Object[] 子型,但存入非 String 會拋 ArrayStoreException(執行期檢查)。void foo(String... args) 內部為 String[]。List<T> / Set<T> 替代陣列,除非效能極度敏感或與原生 API 互操作。for (int v : arr),需索引時用傳統 for。Arrays.copyOf / clone(),避免手寫迴圈。int[] flat = new int[rows*cols]。熟練掌握陣列操作,是 Java 基礎功夫的核心體現。