我在跟随语法方面遇到一个奇怪的问题:
以下代码块不会引发空指针异常
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/