gpt4 book ai didi

java - SAX 解析器和字符串驻留

转载 作者:行者123 更新时间:2023-12-01 07:33:30 25 4
gpt4 key购买 nike

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

最佳答案

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

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

因此,即使在这些情况下 == 会产生正确的结果,您所完成的唯一节省就是(几乎)立即返回的方法调用。我怀疑成本节省在任何形式的衡量中都不会明显。

即使节省了一些可衡量的成本,这似乎也是一个非常危险的优化 - 始终假设这些字符串的 == 比较是正确的。如果 SAX 类的 future 版本改变了行为怎么办?字符串驻留是否是其 API 的已记录功能?听起来很可疑。

关于java - SAX 解析器和字符串驻留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15235104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com