Java中“equals”的含义是什么?

时间:2014-01-13 02:52:25

标签: java

我知道Object类中“equals”方法的来源如下:

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

以下是一个例子:

package equals;

public class Main {

/**
 * @param args
 */
public static void main(String[] args) {

    Object ObjA = new String("BBB");
    Object ObjB = new String("BBB");
    System.out.println(ObjA.equals(ObjB)); //the result is:true
    System.out.println(ObjA == ObjB);      //the result is:false
}
}

我知道如果我改变

是真的
Object ObjA = new String("BBB");
Object ObjB = new String("BBB");

String strA = new String("BBB");
String strB = new String("BBB");

但是现在,我使用Object,我无法理解它。 谁能告诉我原因? THS!

3 个答案:

答案 0 :(得分:2)

这是java的多态性。您可以参考以下网址获取更多信息。 http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html

我也为你感兴趣写了一个简单的程序:

public class testPolymophism {

    public static void main (String[] args){
        animal a = new dog();
        animal b = new cat();
        a.call();
        b.call();
    }
}

class animal{

    public void call(){
        System.out.println("Specific to what animal is.");
    }
}

class dog extends animal{
    public void call(){
        System.out.println("Bark!");
    }
}
class cat extends animal {
    public void call(){
        System.out.println("Mia~");
    }
}

输出:

Bark!
Mia~

答案 1 :(得分:0)

Java在运行时(运行时调度)选择方法实现,而不是在编译代码时。您告诉编译器假装String类型为java.lang.Object并不重要。执行代码时,方法dispacther将从对象的真实运行时类型中选择equals()的实现。

答案 2 :(得分:0)

在java中,当你说:

ObjA == ObjB

它被绝对迂腐地解释为“Obja是否与Objb引用相同的对象”

而“.equals”方法是在对象中实现的,并且因类而异。它大部分都符合你的期望,即比较一些内部成员的平等。但这完全取决于班级的实施。