SAX解析器和字符串实习

时间:2013-03-05 22:07:57

标签: java sax

我注意到DefaultHandler的事件方法中的所有字符串都被实习。看看字符串是否与==而不是equals()相等会更好吗?

@Override
public void startElement(String uri, String localName, String qName,
     Attributes attributes) throws SAXException {

if(localName == "element")
// do something

// or

if(localName.equals("element"))
// do something

}

由于所有字符串文字都是实习的,因此它应该可以提高性能。但是我见过的所有教程和示例都使用equals()

我可以看到的问题是您是否需要使用equalsIgnoreCase()

1 个答案:

答案 0 :(得分:7)

至少在Oracle JDK7中,String.equals(Object)做的第一件事是检查对象引用是否与String实例相同:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    ...

因此,即使==在这些情况下会产生正确的结果,您实现的唯一节省是(几乎)立即返回的方法调用。我怀疑在任何测量中都可以节省成本。

即使有一些可衡量的成本节约,似乎这将是一个非常冒险的优化 - 总是假设==比较对于这些字符串是正确的。如果SAX类的未来版本改变行为怎么办?字符串实习是其API的文档功能吗?听起来很可疑。