首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 二維數組空指針異常:只初始化第一維導致 NPE,正確初始化姿勢詳解

     編輯:程式設計綜合問答

問題代碼片段

String[][] splStrAg = new String[splStr.length][]; // 僅初始化第一維
double[][] d = new double[splStr.length][];        // 僅初始化第一維
// ...
for (int i = 0; i < splStr.length; i++) {
    splStrAg[i] = splStr[i].split(","); // 第二維在此處賦值
    // ...
    for (int j = 0; j < splStrAg[i].length; j++) {
        d[i][j] = Double.parseDouble(splStrAg[i][j]); // NPE 發生處
    }
}

異常原因

聲明 `new String[n][]` 僅分配了第一維引用數組,第二維各行數組仍為 null。雖然後續循環為 `splStrAg[i]` 賦值了字符串數組,但 `d[i]` 從未初始化,直接訪問 `d[i][j]` 導致 NullPointerException。

正確初始化方式

// 方式一:循環中同步初始化第二維
double[][] d = new double[splStr.length][];
for (int i = 0; i < splStr.length; i++) {
    splStrAg[i] = splStr[i].split(",");
    d[i] = new double[splStrAg[i].length]; // 關鍵:為每行分配具體長度
    for (int j = 0; j < splStrAg[i].length; j++) {
        d[i][j] = Double.parseDouble(splStrAg[i][j]);
    }
}

// 方式二:若行長固定,可一次性初始化(此處行長不固定,不適用)
// double[][] d = new double[splStr.length][固定列數];

最佳實踐建議

  • 聲明不規則二維數組(齒狀數組)時,**必須顯式初始化每一行**。
  • 使用 `Arrays.deepToString(d)` 調試打印完整結構,快速定位 null 行。
  • 考慮用 `List>` 替代二維數組,自動管理容量,避免手動初始化錯誤。

牢記「Java 多維數組本質是數組的數組」,逐層初始化是避免 NPE 的關鍵。

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