本帖最后由 黑马刘涛 于 2012-7-14 19:57 编辑
问题:假设有两个对象s1和s2,如果s1==s2结果是true,那么s1.equals(s2)一定为true?
每个类都是使用Object作为超类的,所有对象(包括数组)也实现这个类方法。
对于Object类的equals方法如下:
public boolean equals(Object obj) {
return (this == obj);
}
即是说关于一个普通类,没有作出覆盖equals方法时,改类的比较"=="与equals操作的结果是相同的。
然而当你复写了equals方法,而对象都是new出来的(String类比较特殊除外,比如String str = "abc";如果堆中有一个"abc"常量,就不会new,str直接引用abc的地址),你new了两个对象,就在堆上创建了两个地址不同的对象,理论上s1==s2结果为false,不可能为true。所以你这个问题的前提条件有点问题。
你对自定义类复写了自己应用需要(比如字符串equals方法比较的就是两个串的内容是否相同)的equals方法后,比较就可能不是地址是否相同,而是对象的内容。 |