繁体   English   中英

在Java中进行简单的null检查时出现NullPointerException

[英]NullPointerException at a simple null check in java

我在只进行简单的null检查的行上得到了NullPointerException,该行如下所示:

if(routingTable[commonBitGroups][nextNumberOfOther-1]==null)

我验证数组在此行之前不为null。 commonBitGroups和nextNumberOfOther都是简单的int类型。

我应该补充一点,这一行是使用rmi的应用程序的一部分,也是扩展UnicastRemoteObject并实现RemoteInterface的类的一部分。真正为null(也许是什么时候被锁定),并且我在此应用程序中处理同步。包含行的方法虽然未同步,但在我的代码中却没有尝试将数组用作监视器(我只有一些同步方法,没有较小的同步块,因此我无处可去选择明确的监视器)。

如果以下行抛出NPE:

if (routingTable[commonBitGroups][nextNumberOfOther - 1] == null)

routingTablenullroutingTable[commonBitGroups]null


您说数组初始化如下:

routingTable = new NodeId [32][15]; 
Arrays.fill(routingTable, null);

“好,那是你的问题!”

第一行为您提供32个NodeId []的数组,并将元素初始化为非空值...大小为15的数组。(到目前为止非常好...)

第二行将所有i ...的routingTable[i]null

删除第二行。

如@Gabe所说,routingTable [commonBitGroups]可能为null。 Java没有真正的多维数组:2-d数组是数组的数组(而3-d数组是数组的数组的数组)。

顺便说一句,在Java中,您不必将数组中的引用初始化为null,这是它们的默认值。 在这种情况下,这也是您的问题。 您正在将第二个数组值级别设置为null。 你的意思是

for (int i = 0; i < 32; i++) {
    Arrays.fill(routingTable[i], null);
}

但是如上所述,这是不必要的。 因此,只需删除对Arrays.fill的调用即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM