我注意到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()
答案 0 :(得分:7)
至少在Oracle JDK7中,String.equals(Object)做的第一件事是检查对象引用是否与String实例相同:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
...
因此,即使==
在这些情况下会产生正确的结果,您实现的唯一节省是(几乎)立即返回的方法调用。我怀疑在任何测量中都可以节省成本。
即使有一些可衡量的成本节约,似乎这将是一个非常冒险的优化 - 总是假设==
比较对于这些字符串是正确的。如果SAX类的未来版本改变行为怎么办?字符串实习是其API的文档功能吗?听起来很可疑。