想起来一个Java基础问题,就复习了一下
“==”和equals 最大的区别在于
- “==”是运算符,如果是基本数据类型(八类:byte 、short 、int 、long、float 、 double、char、boolean),则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。
- equals是Object的一个方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值
public boolean equals(Object obj) {
return (this == obj);
}
可以看出equals是Object的一个方法,内部实际也使用了“==”,从这个方法里也就可以看出,equals在没有重写的情况下只能比较两个对象(this == obj)。
有些类重写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;
}