我知道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!
答案 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”方法是在对象中实现的,并且因类而异。它大部分都符合你的期望,即比较一些内部成员的平等。但这完全取决于班级的实施。