首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 陣列完整指南:宣告、建立、初始化、預設值與多維陣列

     編輯:Java 相關知識

陣列是 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];

三、初始化三種模式

1. 預設值初始化(僅建立,不顯式賦值)

int[] a = new int[3]; // [0, 0, 0]
String[] s = new String[2]; // [null, null]
型別類別預設值
整數型0
浮點型0.0
booleanfalse
char'\u0000'
參考型別null

2. 動態初始化(建立後逐項賦值)

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;

3. 靜態初始化(宣告同時賦值,大括號語法)

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();

五、常用操作 API (java.util.Arrays)

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 for (int v : arr),需索引時用傳統 for。
  • ✅ 複製陣列用 Arrays.copyOf / clone(),避免手寫迴圈。
  • ✅ 多維陣列預設為齒狀,記憶體不連續,隨機存取較緩;大矩陣考慮扁平化一維陣列 int[] flat = new int[rows*cols]。

熟練掌握陣列操作,是 Java 基礎功夫的核心體現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved