public static void test() {
String[] str = new String[1024]; // 1. 分配引用數組,所有元素默認 null
for (int i = 0; i < 200; i++) {
str[i] = "23232"; // 2. 僅初始化前 200 個
}
int max = 0;
for (int i = 1; i < str.length - 1; i++) { // 3. 遍歷全部 1024 個
if (str[i].length() > 0) // 4. i>=200 時 str[i] 為 null → NPE
max += 1;
}
System.out.print(max);
}
Exception in thread "main" java.lang.NullPointerException
at Test.test(Test.java:XX) // str[i].length() 行
for (int i = 1; i < str.length - 1; i++) {
if (str[i] != null && str[i].length() > 0) // 短路求值,先判 null
max += 1;
}
String[] str = new String[1024];
Arrays.fill(str, ""); // 全部初始化為空字符串 ""
// 或循環賦值
for (int i = 0; i < str.length; i++) str[i] = "";
List list = new ArrayList<>(1024);
for (int i = 0; i < 200; i++) list.add("23232");
// 後續遍歷無 NPE 風險,size() 為實際元素數
for (String s : list) {
if (s.length() > 0) max++;
}
| 概念 | 說明 |
|---|---|
| 引用類型數組默認值 | `null` (非空字符串 `""`) |
| 基本類型數組默認值 | `0` / `false` / `0.0` 等 |
| 數組長度 vs 元素個數 | `length` 是容量,非有效數據量 |
| 短路求值 `&&` | 左邊為 `false` 右邊不執行,防 NPE 利器 |
**「數組創建 ≠ 元素初始化」** 是 Java NPE 高發區。本例中僅初始化 200/1024 元素,遍歷全量導致訪問 `null`。掌握「引用默認 `null`、遍歷前判空、優先用集合」三原則,可消除 90% 此類低級錯誤。