“==“运算符,对于基本数据类型,比较的是值;对于引用数据类型,比较的就是两个对象的地址;
而equals()是Object类中的方法,默认和==
相同都是比较的是对象的地址,但是String,Math,Integer,Double等封装类中都对equals()方法进行了不同程度的重写,比较的是值。
Object类中的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}
String类的equals方法:
public boolean equals(Object anObject) {
if (this == anObject) {//如果地址相同两string肯定相等
return true;
}
//如果两个对象等价,前提是它们一定为相同的类型
//判断类型是否相同
if (anObject instanceof String) {
//类型相同均为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) {
//逐个比较字符是否一样,完全符合,则返回ture,一旦不对,返回false;
if (v1[i] != v2[i])
return false;
i++;
}
//逐个比较后字符都一样且长度相等,则两字符串肯定相等。
return true;
}
}
return false;//(不是相同类型)或者(是相同类型但是长度不等),那么两字符串的值不相等。返回false.
}
//java中,instanceof运算符的前一个操作符是一个引用变量,后一个操作数通常是一个类(可以是接口),用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是返回true,否则返回false。