对于测试两个变量是否相等有两种方式,==和equals(),前者是运算符,而后者是对象的方法。
一、==
如果两个变量是基本类型的,且都是数值类型,两个变量的值相等,则返回true;
如果两个 变量是引用类型的,只有它们指向同一个对象时,返回结果才是true,此时比较的是两个对象的地址是否相等。
二、equals()
该方法在Object对象中,任何java对象皆继承Object对象,所以所有对象中都有equals()方法,
Object类equals()方法的实现:
public boolean equals(Object obj) {
return (this == obj);
}
通过源码我们看一看到,equals()方法的底层是用==实现的,也就是同样只有两个引用变量指向同一个对象时才返回true。
到这里我们可能会发现,提供的equals()方法并没有太大的实际意义。但是不要忘了,方法是可以重写的哦,也就是说我们可以根据自己的相等标准来自定义相等。
在String中,就已经重写了equals()方法,不再是仅仅判断两个引用变量是否指向同一个对象,并且当两个字符串的内容相同时也返回true。
String类equals()方法的实现(方法已经被重写):
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = length();
if (n == anotherString.length()) {
int i = 0;
while (n-- != 0) {
if (charAt(i) != anotherString.charAt(i))
return false;
i++;
}
return true;
}
}
return false;
}