[英]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.