等于对象中的方法

时间:2014-02-20 12:42:28

标签: java object equals

这是我的代码:

Object a = "1234";
Object b = new Integer("1234");

我知道==表示引用,equals()表示包含。

现在为什么a.equals(b)是假的?

每个人都有相同的价值。

3 个答案:

答案 0 :(得分:7)

因为两者都来自不同的班级。 a来自String班级,b来自Integer班级。因此,它将返回false而不进一步检查实例的内容。

尽管您已经使用Object引用声明了这两个实例,但是在运行时,当您调用.equals()方法时,它们将委派给它们实际的实例类。

例如,如果您采用Stringequals()方法,则类似于

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;
}

因此,如果您传递了另一个类的实例,它将返回false

答案 1 :(得分:5)

您的aObject容器,其中包含String个对象,而您的bObject容器,其中包含Integer个对象

当您在equals()上致电a时,会String.equals()String会发现您的Integer不等于{{1}}而且没有自动装箱和自动装箱的数量可以做到这一点。

答案 2 :(得分:1)

由于Kugathasan Abimaran已经给出了解释,我将添加您可以自己看到的这个小代码:

System.out.println(a + " might look like " + b + " but " + a.getClass() + " does not equal " + b.getClass());

这将导致:

  

1234可能看起来像1234但类java.lang.String不等于类java.lang.Integer