1

有人可以向我解释为什么以下结果会导致空指针异常吗?以及如何为 bitarray[0] 设置值?

      BitSet[] bitarray;
      bitarray= new BitSet[10];
      bitarray[0].set(1);

另外,为什么这样的工作不会导致指针异常?

     BitSet[] bitarray = new BitSet[10];
     BitSet bits = new BitSet(32);
     bits.set(1);
     bitarray[0] = bits;

谢谢

4

5 回答 5

2

当您初始化bitarray

bitarray = new BitSet[10];

它是一个包含 10 个引用的数组,所有引用都是null. 您需要先初始化每个引用,然后才能使用它。在第二种情况下,您分配bits为 的值bitarray[0]bitarray[0]在第一种情况下,您在调用之前没有分配任何东西set()

于 2012-09-24T03:33:19.657 回答
1

bitarray= new BitSet[10];用 value 设置 10 个索引null

第一个案例

bitarray[0]null。你没有赋值。这就是为什么NPE

第二种情况::

您正在将值设置为Bitset,然后将其分配给index 0

于 2012-09-24T03:33:20.687 回答
1

您已经初始化了 bitarray,但之后还必须分别初始化每个项目;否则你拥有的是一个包含 10 个空引用的数组。

于 2012-09-24T03:35:03.747 回答
1

您可以在Arrays Tutorial上找到很好的帮助

数组

在上面的例子中,如果你只声明数组,10 BitSet因为默认值BitSetnull所以它包含所有null引用

BitSet[] bitarray = new BitSet[10];

所以初始化你需要做的引用

bitarray[index] =  new BitSet(SomeValue)
于 2012-09-24T04:13:47.210 回答
0

仅仅因为您有一个包含十个空间的数组,并不意味着该数组已填充。在工作示例中,您正在设置一个值....

于 2012-09-24T03:33:22.593 回答