[英]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)
则routingTable
为null
或routingTable[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.