- ==是运算符,用于比较两个变量是否相等,对于基本类型而言比较的是变量的值,对于对象类型而言比较的是对象的地址.
- equals() 是Object类的方法,用于比较两个对象内容是否相等.默认Object类的 equals() 实现如下:
public class Object { ...... public boolean equals(Object obj) { return (this == obj); } ...... }
不难看出此时equals()是比较两个对象的地址,此时直接==比较的的结果一样.对于可能用于集合存储中的对象元素而言,通常需要重写其equals()方法.
a==b与a.equals(b)有什么区别
如果a 和b 都是对象,则 a==b 是比较两个对象内存地址,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true.而 a.equals(b) 是进行内容比较,其比较结果取决于equals()具体实现.多数情况下,我们需要重写该方法,如String 类重写 equals()用于两个不同对象,但是包含的字母相同的比较:
public boolean equals(Object anObject) {
if (this == anObject) { // 同一个对象直接返回true
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;
}