为什么String.equals中有“==”?

时间:2015-06-25 05:32:25

标签: java string

为什么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;
    }

3 个答案:

答案 0 :(得分:10)

  

为什么Java在equalsIgnoreCase方法中比较(this == another String)来检查字符串不敏感?

这是一项优化。如果传入的引用与this完全相同,那么equals 必须返回true,但我们不需要查看任何字段一切都和自己一样。来自Object.equals(Object)的文档:

  

equals方法在非null对象引用上实现等价关系:

     
      
  • 它是自反的:对于任何非空引用值x,x.equals(x)应该返回true。
  •   
  • ...
  •   

以等同性检查开始是非常常见的:

  • 另一个参考是否等于this?如果是,请返回true。
  • 另一个引用是否为null?如果是,请返回false。
  • 另一个引用是否引用了错误类型的对象?如果是,请返回false。

然后继续进行特定类型的检查。

答案 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为真,您不需要任何其他比较来确定它们是否相等。