当前位置: 代码迷 >> java >> 空指针访问:变量 b 在该位置只能为空
  详细解决方案

空指针访问:变量 b 在该位置只能为空

热度:52   发布时间:2023-07-17 20:29:33.0

我在代码的以下部分的最后一行中收到上述错误。

String[][] b = null;
try {
  br = new BufferedReader(new FileReader(csvFile));
  while ((line = br.readLine()) != null) {
    // use comma as separator
    String[] country = line.split(cvsSplitBy);
    String[] a=country[1].split(splits);
    i = 0;
    n = 0;
    while(i<a.length) {
      b[j][n]+=a[i];
    }
  }
} catch (...) {}

这个错误的原因是什么以及如何解决这个问题?

b的唯一两个用途是

b = null;
...
*b[j][n] ...

您需要先将b设置为实际数组,然后才能尝试对其进行索引。

String[][] b 为null 看起来你不应该在这里使用Array因为你不知道预先的大小。 您可以将ArrayList与一些自定义对象一起使用。

(第 4.3.1 节),是动态创建的,并且可以分配给对象类型的变量(第 4.3.2 节)[...] 数组的一个组件被数组访问访问表达式(第 15.13 节)由一个表达式组成,该表达式的值是一个数组引用,后跟一个由 [ 和 ] 括起来的索引表达式,如 A[i]。

数组访问表达式如何工作? 像。

相关位:

否则,如果数组引用表达式的值为 null,则抛出 NullPointerException。

长话短说:数组是对象,而b是对(数组)对象的引用——基本上就像 Java 中除了基本类型之外的所有内容。

一个引用可以指向某个东西,也可以是一个null引用。

null引用与堆中任何其他类型的对象完全不同包括空数组:您不能对它做任何事情,包括尝试访问它的元素,除了为其分配一个值(将它想象成一个地址簿中的空白“电话”行:在打电话之前,您必须有一个要拨打的号码!)


所以,你必须首先让你的参考指向一个实际的数组,用

b = new String[10][10]

之后立即使用

String[][] b = null;

会是个好主意; 或者你可以只String[][] b = new String[10][10]()


此时, b指向堆中的一个字符串数组,你可以用它做一些事情

请注意,您必须指定大小。

如果您还不知道它,您可能最好使用其他容器,例如 ,它。

  相关解决方案