对象都有equals()方法,是判断两个对象是否相等,是指向地址的比较。
并不是所有对象的equals()的方法是相同的,在一些类中对equals()进行了重写,例如String、Math。jdk1.7的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;
}
显然它是对内容比较,而不是地址的比较。所以在进行不同类型对象的比较时,应注意下通常比较的用法。
1) 对象域,使用equals方法 。
2) 类型安全的枚举,使用equals或== 。
3) 可能为null的对象域 : 使用 == 和 equals 。
4) 数组域 : 使用 Arrays.equals 。
5) 除float和double外的原始数据类型 : 使用 == 。
6) float类型: 使用Float.foatToIntBits转换成int类型,然后使用==。
7) double类型: 使用Double.doubleToLongBit转换成long类型,然后使用==。
2) 类型安全的枚举,使用equals或== 。
3) 可能为null的对象域 : 使用 == 和 equals 。
4) 数组域 : 使用 Arrays.equals 。
5) 除float和double外的原始数据类型 : 使用 == 。
6) float类型: 使用Float.foatToIntBits转换成int类型,然后使用==。
7) double类型: 使用Double.doubleToLongBit转换成long类型,然后使用==。
对于float double为什么不直接用==,本人修为尚浅,大家可以参考下这个博客:
http://blog.csdn.net/turkeyzhou/article/details/2755970