http://bbs.csdn.net/topics/390000725
总结:
equals在没重写之前和==一样,重写之后,equals只要内容一样即为true
equals跟==一般情况下是等价的,但是对于String类型,它重写了equals方法,比较的是内容。默认情况下两个都是比较的引用地址,除非你重写equals方法。
equals源码:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; }
版主解答:
“但是经常说==两边对象是按地址在比较,而equals()是按内容在比较”这句话在排除根类Object以及没有自己重写equals方法的情况下是对的。
即Object类中equals的实现就是用的==
其他继承Object的equals方法基本上都重写了这个方法,比如String类的equals方法:
XML/HTML code
1 2 3 4 5 6 7 8 9 10 11 12 |
|
这是String的equals方法源码:
Java code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|