日期:2014-05-19  浏览次数:20715 次

关于equals比较对象内容的问题。
都说equals比较的是对象内容。那么我写一个TestBean类:
public TestBean{}
然后测试:
public class TestMain {
public static void main(String[] args) {
TestBean t1=new TestBean();
TestBean t2=new TestBean();
System.out.println(t1.equals(t2));
}
}
为什么t1与t2不相等呢?如果说equals方法内部首先是比较hashcode,那我重写掉hashcode:
public class TestBean {
@Override
public int hashCode() {
return 1;
}

}
然后再执行测试类,还是返回false。
求人解答,谢谢!


------解决方案--------------------
楼主搞混了。Object 的equals方法比较的是地址。
所以你的两个TestBean 对象,equals一下当然返回false。
String类的equals方法比较内容,因为里面是重写了equals方法了。默认都是比较的地址。
------解决方案--------------------
探讨

引用:

首先区分equals和==, 对于对象类型的==操作,比较的是两个对象的引用地址;
对于equals方法,若没有重写Object的equals方法, 就会调用Object的equals方法,而Object的equals方法用的是==操作来比较两个对象,也即和t1==t2是一样的;并不是你说的equals方法内部首先是比较hashcode;

t1和t2是两个……