日期:2014-05-20  浏览次数:20573 次

java equals 方法
package test;

public class Test1 {

private String value =null;
public Test1(String value){
this.value =value;
}
public boolean equals(Test1 o){
if(o==this){
return true;
}
if(o instanceof Test1){
Test1 test1=(Test1) o;
return value.equals(test1.value);
}
return false;
}

public static void main(String[] args){
Test1 t = new Test1("object");
Object to = new Test1("object");

System.out.println(t.equals(to));
}
}
输出就结果是false,求解释,谢谢。

------解决方案--------------------
public boolean equals(Test1 o)
你现在调用的还是Object.equals(Object)方法。
public boolean equals(Test1 Object o)
------解决方案--------------------
重写的equals方法的要求参数类型是Object类型
重写的话建议在方法前加@Override
------解决方案--------------------
在 equals方法前加上 @Override可以在编译时捕捉到这种低级错误

Java code
@Override public boolean equals(Object o){
 ... 
}

------解决方案--------------------
用IDE吧,更形象
------解决方案--------------------
始终是object的类型参数
------解决方案--------------------
public boolean equals(Test1 o)
你现在调用的还是Object.equals(Object)方法。
public boolean equals(Test1 Object o)


建议重写方法 ,方法定义部分还是去API中复制一份,出来,或者用IDE来生成
------解决方案--------------------
http://blog.csdn.net/tkd03072010/article/details/6706526
看看这个
------解决方案--------------------
用 eclipse直接生成
------解决方案--------------------
hashCode 和 equals的关系。 
两个对象 equals的时候,hashCode必须相等,但hashCode相等,对象不一定equals。 

如果没有重写 hashcode方法,使用Object自带的hashCode,无法保证两个对象equals的时候 hashCode 必须相等的条件。

需要重写hashcode方法.
------解决方案--------------------
你的equals方法不是重写的,把equals(Test1 o)中的参数改成equals(Object o)就好了
------解决方案--------------------
请始终记住,重写equals方法,必须重写hashCode方法