數組是 Java 中最基礎的容器類型,理解其內存佈局與語法限制,能避開大量低級錯誤。本文梳理核心規則並補充實戰注意事項。
| 操作 | 正確示例 | 錯誤示例 | 說明 |
|---|---|---|---|
| 聲明 | int[] arr; / int arr[]; | int[5] arr; | 聲明時不指定長度,中括號前後皆可 |
| 靜態初始化 | int[] arr = {1,2,3}; | int[] arr; arr = {1,2,3}; | 僅能在聲明語句中使用大括號初始化 |
| 動態初始化 | int[] arr = new int[5]; | — | 必須指定長度,元素自動賦默認值(0/null/false) |
| 訪問越界 | — | arr[5] (長度5) | 編譯通過,運行拋 ArrayIndexOutOfBoundsException |
棧內存 (Stack) 堆內存 (Heap)
┌──────────────┐ ┌─────────────────────┐
│ arr (引用) │ ──────►│ int[3] {10,20,30} │
└──────────────┘ │ 索引: 0 1 2 │
└─────────────────────┘
// 不規則數組(每行長度不同) int[][] matrix = new int[3][]; matrix[0] = new int[2]; matrix[1] = new int[4]; matrix[2] = new int[1];
遍歷時請用 matrix[i].length 獲取每行實際長度,避免硬編碼。
ArrayList;int[] b = a; 只是複製引用,深拷貝用 Arrays.copyOf 或 System.arraycopy;new T[10] 編譯報錯,需 (T[]) new Object[10] 並接受非受檢警告;add/remove,需 new ArrayList<>(Arrays.asList(...)) 包裹。java.util.ArraystoString() / deepToString():調試打印神器;sort() / binarySearch():雙軸快排 + 二分查找;copyOf() / copyOfRange():高性能擴容/截取;fill() / setAll():批量賦值/ Lambda 初始化。「數組是性能的基石,集合是生產力的工具。分清場景選對武器,代碼才既快又穩。」