默认等于java中的实现如何为String工作?

时间:2013-03-23 10:14:40

标签: java string equals

我们都知道如果我们创建两个String对象并使用==来比较它们将返回false,如果我们使用equals方法它将返回true。但默认情况下等于方法实现==,那么它如何返回true,它应该返回==返回的是什么?

5 个答案:

答案 0 :(得分:8)

默认情况下是等于==类中的方法实现Object。但是,您可以覆盖自己类中的equals方法,以更改同一类的两个对象之间的equality方式。例如,equals类中的String方法被覆盖如下:

public boolean equals(Object anObject) {
          if (this == anObject) {
              return true;
          }
          if (anObject instanceof String) {
              String anotherString = (String)anObject;
              int n = count;
              if (n == anotherString.count) {
                  char v1[] = value;
                  char v2[] = anotherString.value;
                  int i = offset;
                  int j = anotherString.offset;
                  while (n-- != 0) {
                      if (v1[i++] != v2[j++])
                          return false;
                  }
                  return true;
              }
          }
          return false;
      }

所以这就是以下代码的原因:

String s1 = new String("java");
String s2 = new String("java");

s1==s2返回false,因为它们都在堆上引用不同的对象。而s1.equals(s2)返回true,因为现在调用的equals是在String类中定义的String对象基于contents进行比较的内容字符串。

答案 1 :(得分:1)

重写String类中的equals方法,它会尝试检查两个字符串中的所有字符是否相等。如果找到则返回true。因此String类中equals方法的行为与它的正常对象类实现不同。

答案 2 :(得分:0)

equals方法最初是Object类的方法。 Java中的每个类都默认扩展Object类。现在,equals类覆盖了String方法,其行为与==不同。

javadoc完美地解释了它:

  

将此字符串与指定对象进行比较。结果是   当且仅当参数不为null且为a时,才为true   String对象,表示与此字符相同的字符序列   对象

它的实施如下:

@override
public boolean equals(Object anObject) {
// This check is just for the case when exact same String object is passed
if (this == anObject) {
    return true;
}
// After this only real implementation of equals start which you might be looking for
// For other cases checks start from here
if (anObject instanceof String) {
    String anotherString = (String)anObject;
    int n = count;
    if (n == anotherString.count) {
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = offset;
    int j = anotherString.offset;
    while (n-- != 0) {
        if (v1[i++] != v2[j++])
        return false;
    }
    return true;
    }
}
return false;
}

答案 3 :(得分:0)

.equals()检查字符串是否相同ei。有相同的字符。 ==仅检查指针是否指向相同的对象。您可以使用相同的字符使用不同的对象,这就是您应该使用.equals()来比较它们的原因

答案 4 :(得分:0)

java中的

String类覆盖equals类的Object方法,以便比较两个字符串的内容而不是比较引用(Object中的默认实现} class)。

请参阅下面equals类的String方法实现:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }