數組是 Java 中最基礎的容器,本文系統梳理聲明語法、內存分配、多維數組、參數傳遞機制及常見誤區。
// 風格 1:類型後加 [](推薦,語義清晰:int 數組類型) int[] scores = null; // 風格 2:變量名後加 [](C 風格,不推薦) int scores2[] = null;
int[] scores = {90, 85, 95, 88}; // 長度自動推導為 4
int[] scores = new int[3]; // 分配 3 個 int 默認值 0 scores[0] = 1; scores[1] = 3; scores[2] = 5;
int[] scores = new int[]{1, 3, 5}; // 匿名數組創建
// 不規則二維數組
int[][] matrix = new int[3][];
matrix[0] = new int[2];
matrix[1] = new int[4];
matrix[2] = new int[1];
// 靜態初始化
int[][] grid = {{1,2}, {3,4,5}, {6}};
public class ArrayParamDemo {
public static void modifyArray(int[] arr) {
// 1. 修改元素內容 → 影響原數組
arr[0] = 999;
// 2. 重新賦值引用 → 不影響原數組
arr = new int[]{100, 200};
}
public static void main(String[] args) {
int[] data = {1, 2, 3};
modifyArray(data);
System.out.println(data[0]); // 999(元素被修改)
System.out.println(data.length); // 3(引用未變)
}
}
main棧幀: data ──────┐
▼
堆內存: [1, 2, 3] ← 同一對象
▲
modify棧幀: arr ──────┘ (副本指向同一對象)
arr = new int[] 時:
modify棧幀: arr ──────► [100, 200] (新對象,原對象不受影響)
| 操作 | 代碼示例 |
|---|---|
| 長度 | arr.length (屬性,非方法) |
| 遍歷 | for (int v : arr) 或 Arrays.stream(arr) |
| 複製 | Arrays.copyOf(arr, newLen) / System.arraycopy() |
| 排序 | Arrays.sort(arr) |
| 轉字符串 | Arrays.toString(arr) |
| 填充 | Arrays.fill(arr, val) |
ArrayList 或手動複製擴容ArrayIndexOutOfBoundsException,循環條件嚴格用 < lengthString[] arr = new String[3]; // [null, null, null]List<T> / ArrayList 替代原始數組,除非極度追求性能或與底層 API 交互List 或 Stream,避免數組引用洩露public int[] getData() { return Arrays.copyOf(internalArr, internalArr.length); }掌握數組本質是「固定長度、連續內存、引用類型」,才能寫出高效、無 Bug 的 Java 代碼。