equals方法分析
equals方法默认等同于“==”,都是判断两个对象的地址是否相等,因为String类对equals方法进行了重写,所以只要内容一样,就是相等的。
例:String类重写Object类的equals方法判断两个字符串的内容是否相等
public class StringDemo {
public static void main(String[] args) {
String str1 = "";
String str2 = new String("");
((str2)); //结果为true
}
}
重写的equals方法源码如下:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = ;
if (n == ) {
char v1[] = value;
char v2[] = ;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
判断思路:地址->长度->每个字符
参数:从以上代码得知equals方法有一个参数,该参数是Object类型;将str2传入该方法时str2的值被赋值给Object类型的变量(上转型对象)
返回值:该方法的返回值是boolean类型,在该例中是判断str1和str2两个字符串是否相等
第一个if语句:
this是指当前对象,哪个对象调用了该方法,this就代表哪个对象,在该例中代表的就是str1
该判断比较两个对象的地址是否相等,若不相等则if语句中的内容跳过不执行;若相等表明它们是同一个对象,内容也必相等,返回true,方法结束
第二个if语句:
判断传入的对象是否是String类的实例,如果不是则if语句中的内容跳过不执行;如果相等则将传入的对象下转型为String类型
内层if语句判断两个String类对象的长度是否相同,若不同则if语句中的内容跳过不执行,返回false,结束该方法;若相同则则将两个String类对象转换为字符数组
用while语句逐个比较相同下标的字符是否相等,只要有一组不同就返回false,结束该方法