equals方法分析
- 例:String类重写Object类的equals方法判断两个字符串的内容是否相等
public class StringDemo { public static void main(String[] args) { String str1 = "www.jpc.com"; String str2 = new String("www.jpc.com"); System.out.println(str1.equals(str2)); //结果为true } }
- 重写的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; }
- 判断思路:地址->长度->每个字符
- 参数:从以上代码得知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,结束该方法