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

时间:2015-07-25 16:12:15

标签: java nullpointerexception

我在代码的这一部分的最后一行中得到了上述错误。

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 (...) {}

此错误的原因是什么以及如何解决?

3 个答案:

答案 0 :(得分:2)

b的唯一用途是

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

In the Java programming language, arrays are objects(§4.3.1),   是动态创建的,可以分配给类型的变量   Object(§4.3.2)[...]数组的一个组件由一个数组访问表达式访问   (§15.13)由一个表达式组成,该表达式的值是一个数组   引用后跟一个由[和]括起来的索引表达式,as   在A [i]。

数组访问表达式如何工作?与this一样。

相关位:

  

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

长话短说:数组是对象,b是对(数组)对象的引用 - 就像基本类型中的Java一样。

引用可以指向某些内容或是null引用。

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

所以,您必须首先将指向引用到实际数组,

b = new String[10][10]

之后使用此权限

String[][] b = null;

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

此时,b指向堆中的字符串数组,您可以用它做事

请注意,您必须指定尺寸。

如果你还不知道它,你可能会更好地使用其他容器,例如ArrayListgrows dynamically