空指针在一个奇怪的地方



我不明白这怎么可能抛出空指针异常。代码如下:

if (gameServers.isEmpty()) {
    return false;
}
int freeSlots = Integer.MIN_VALUE;
GameServer chosenOne = null;
for (GameServer gs : gameServers) {
   if (gs.getSlots() > freeSlots) { // THIS LINE throws the nullpointer exception
       freeSlots = gs.getSlots();
       chosenOne = gs;
   }
}

其中gs.getSlots()是一个简单的return this.slots (int类型)。gameServers的数组列表是由new GameServer(..., ..., slots)对象填充的,这些对象也不能返回null。

有谁能告诉我从哪里开始找吗?

您需要检查for循环中gs是否为null,例如

if(gs != null && <insert original if statement>){
    ....

虽然您的集合不是空的,但它可能有一个null元素。

例如

    List<String> myList = new ArrayList<String>();
    myList.add(null);
    if(!myList.isEmpty()) {
        for(String str : myList){
            System.out.println(str.length());
        }
    }

将抛出NPE。为了避免这种情况,您可以使用一个简单的null检查。

    for (GameServer gs : gameServers) {
        if(gs != null) {
            if (gs.getSlots() > freeSlots) { 
                freeSlots = gs.getSlots();
                chosenOne = gs;
            }
        }
    }

最新更新