一尘不染

在Java中对字符串和对象使用equals()方法

java

Object o1 = new Object();
Object o2 = new Object();
//o1=o2;
System.out.println(o1.equals(o2));

它返回falsetrue如果删除了注释,则可以返回。


为什么同一件事不适用于该String班级?

String s1=new String();
String s2=new String();
System.out.println(s1.equals(s2));

它返回true。为什么?(因为String使用实习生或其他涉及的东西?)


阅读 233

收藏
2020-12-03

共1个答案

一尘不染

因为
String的equals()
比较内容,而不是对象本身。

公共布尔等于(Object anObject)

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

    /* String.equals() */
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.equals()的源)


等于Object相等

类的equals方法Object在对象上实现了最有区别的对等关系。也就是说,对于任何非空引用值xy,当且仅当xy引用同一对象(x == y具有值true)时,此方法返回true 。

/* Object.equals() */
public boolean equals(Object obj) {
    return (this == obj);
}

(链接到Object.equals()的源)

另外,请不要忘记equals()函数的约定:

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

  • 这是 自反的 :对于任何非null的参考值xx.equals(x)应返回true。
  • 它是 对称的
    :对于任何非空引用值xyx.equals(y)当且仅当y.equals(x)返回true时,才应返回true。
  • 它是 传递
    性:对于任何非空的参考值xy以及z,如果x.equals(y)回报率truey.equals(z)回报率true,那么x.equals(z)应该返回true
  • 它是 一致的
    :对于任何非null的引用值x和,只要不修改对象的equals比较中使用的信息y,就可以多次调用x.equals(y)一致返回true或一致返回false
  • 对于任何非null的参考值xx.equals(null)应返回false
2020-12-03