class Main{
private String value=null;
public Main(String v){
value=v;
}
public boolean equals(Main o){
if(o==this){
return true;
}
if(o instanceof Main){
Main main=(Main)o;
return value.equals(main.value);
}
return false;
}
public static void main(String[] args){
List list=new ArrayList();
Main main1=new Main("object");
Main main2=new Main("object");
Main main3=new Main("object");
Object main4=new Main("object");
list.add(main1);
System.out.println(list.contains(main2));
System.out.println(main2.equals(main3));
System.out.println(main3.equals(main4));
}
}
这段代码的输出是false true false;主要郁闷的是第三个为什么是false。这是因为在main类中,有一个默认的方法 boolean equals(Obejct o) ,在Java中,返回值,方法名,参数类型三者完全相同才会被覆盖,否则不会,所以第三个调用的是该方法。而Object的equals方法返回值就是false啦。
转载请注明原文地址:http://uwind.iteye.com/blog/1943336