我在仅进行简单空检查的行处收到 NullPointerException。该行如下:
if(routingTable[commonBitGroups][nextNumberOfOther-1]==null)
我验证该行之前的数组不为空。 commonBitGroups 和 nextNumberOfOther 都是简单的 int 类型。
我应该补充一点,这一行是使用 rmi 的应用程序的一部分,也是扩展 UnicastRemoteObject 并实现 RemoteInterface 的类的一部分。我指定这一点是因为我的印象是,即使在处理同步时也可能会发生 NullPointerException如果没有什么是真正的空(也许当某些东西被锁定时),并且我在这个应用程序中处理同步。包含该行的方法虽然没有同步,并且在我的代码中没有任何地方我尝试使用该数组作为监视器(我只有一些同步方法,没有更小的同步块(synchronized block),所以我无处明确选择特定的监视器)。
最佳答案
如果以下行抛出 NPE:
if (routingTable[commonBitGroups][nextNumberOfOther - 1] == null)
那么 routingTable
为 null
或 routingTable[commonBitGroups]
为 null
。
你说数组初始化如下:
routingTable = new NodeId [32][15];
Arrays.fill(routingTable, null);
“好吧,这就是你的问题!”
第一行为您提供了一个包含 32 个 NodeId[] 的数组,其中元素初始化为非空值...大小为 15 的数组。(到目前为止还不错...)
第二行将所有 i
的 routingTable[i]
设置为 null
....哎呀!!
删除第二行。
关于java - java中简单的空检查时出现NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4871047/