Java:取消装箱整数时出现空指针异常?

2022-09-01 18:07:44

此代码导致空指针异常。我不知道为什么:

private void setSiblings(PhylogenyTree node, Color color) throws InvalidCellNumberException {
    PhylogenyTree parent = node.getParent();

    for (PhylogenyTree sibling : parent.getChildren()) {
        if (! sibling.equals(node)) {
            Animal animal = sibling.getAnimal();
            BiMap<PhylogenyTree, Integer> inverse = cellInfo.inverse();
            int cell = inverse.get(animal); // null pointer exception here
            setCellColor(cell, color);
        }
    }
}

我已经在调试器中检查了它,所有局部变量都是非空的。否则怎么会发生这种情况呢?BiMap来自Google Collections。


答案 1

空指针异常是取消装箱的结果。如果 不包含键,则返回 “类型”。假设赋值是指向引用的,Java 会将值取消装箱到 中,从而导致空指针异常。inverse.get(animal)inverseanimalnullIntegerintint

您应检查或用作局部变量类型,以避免取消装箱并采取相应的操作。正确的机制取决于您的上下文。inverse.containsKey(animal)Integer


答案 2

检查 .相反,可能没有动物。inverse.containsKey(animal), BiMap<PhylogenyTree, Integer>


推荐