为什么Java在equalsIgnoreCase方法中比较(this == another String)来检查字符串不敏感?
另外,String equals是比较(this ==另一个String)来比较两个对象吗?
Java 6:String Class equalsIgnoreCase实现,如下所示。
public boolean equalsIgnoreCase(String anotherString) {
return (this == anotherString) ? true :
(anotherString != null) && (anotherString.count == count) &&
regionMatches(true, 0, anotherString, 0, count);
}
Java 6:String Class等于下面给出的实现。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
答案 0 :(得分:10)
为什么Java在equalsIgnoreCase方法中比较(this == another String)来检查字符串不敏感?
这是一项优化。如果传入的引用与this
完全相同,那么equals
必须返回true
,但我们不需要查看任何字段一切都和自己一样。来自Object.equals(Object)
的文档:
equals方法在非null对象引用上实现等价关系:
- 它是自反的:对于任何非空引用值x,x.equals(x)应该返回true。
- ...
以等同性检查开始是非常常见的:
this
?如果是,请返回true。然后继续进行特定类型的检查。
答案 1 :(得分:2)
==
是正确的 - 由于String interning,效率提高的可能性比任何其他类更高。
请注意以下代码:
return (this == anotherString) ? true : <rest of line>
本来可以写成(更优雅的恕我直言):
return this == anotherString || <rest of line>
答案 2 :(得分:1)
this == another object
这是几乎所有对象的equals
方法的基本检查,而不仅仅是在String类中。它是高效,也是在您自己的班级中首先检查这一点的好习惯
逻辑很简单如果两者具有相同的引用,那么它们总是指相同的对象,因此它们相等。
如果this == another object
为真,您不需要任何其他比较来确定它们是否相等。