我在跟随语法方面遇到一个奇怪的问题:

以下代码块不会引发空指针异常

Map<String, String> requestHeaderMap = FacesContext.getCurrentInstance().getExternalContext().getRequestHeaderMap();

if(!"partial/ajax".equals(requestHeaderMap.get("faces-request")))
{
    System.out.println("This works");
}


但这引发了空指针异常:

FacesContext.getCurrentInstance().getExternalContext().getRequestHeaderMap().get("faces-request").equals("partial/ajax")


我只是不知道这里出了什么问题。除了可读性之外,我没有看到两个调用之间有任何区别。

最佳答案

两者以不同的顺序做事。就像x.equals(y)y.equals(x)之间的区别一样。如果y为null,则只有其中的第二个将抛出NPE。在您的情况下,requestHeaderMap.get("faces-request")为空。

这不会引发异常,因为* .equals(null)非常好:

"partial/ajax".equals(requestHeaderMap.get("faces-request")


另一方面,这试图取消引用null:

getRequestHeaderMap().get("faces-request").equals("partial/ajax")

关于java - 等于比较中的奇怪问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14564851/

10-13 09:20