簡體   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