这是很多人的误区,认为==比较的是数值,equals比较的是字符串
= =:
基本类型比较值:只要两个变量的值相等,即为true.
引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,==才返回true.
equals:
只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。
注意:当用equals()方法进行比较时,对类File、String、Date及包装类来说,是比较类型及内容而不考虑引用的是否是同一个对象;
原因:在这些类中重写了Object类的equals()方法。这就导致很多人以为equals就是比较的是内容。
举例:String源码里重写equals的地方:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}