String类重写的equals方法

时间:2025-02-21 17:41:07

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,结束该方法