我注意到所有Strings in DefaultHandler的事件方法都被实习.看看Strings是否等于==而不是更好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
}
Run Code Online (Sandbox Code Playgroud)
由于所有字符串文字都是实习的,因此应该提高性能.但是我见过的所有教程和示例都使用了equals()
我能看到的一个问题是你是否需要使用 equalsIgnoreCase()
至少在Oracle JDK7中,String.equals(Object)做的第一件事是检查对象引用是否与String实例相同:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
...
Run Code Online (Sandbox Code Playgroud)
因此,即使==在这些情况下会产生正确的结果,您所实现的唯一节省是(几乎)立即返回的方法调用.我怀疑在任何类型的测量中都可以节省成本.
即使有一些可衡量的成本节约,似乎这将是一个非常冒险的优化 - 总是假设==比较对于这些字符串是正确的.如果SAX类的未来版本改变行为怎么办?字符串实习是其API的文档功能吗?听起来很可疑.