0

我注意到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

}

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

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

4

1 回答 1

7

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

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

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

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

于 2013-03-05T22:14:04.310 回答