深入了解equals怎么比较String类型的对象
关键字:String、equals、char数组
关于equals我们知道是用来比较内容,今天研究一下具体怎么实现。
package test; public class Demo01 { public static void main(String[] args) { String a = "1"; System.out.println(a.equals(1)); } }
上面这行代码一个是String类型一个是int类型所以输出结果是false。
public boolean equals(Object anObject) { //判断两个值地址是否相同,如果一样直接返回true。 if (this == anObject) { return true; } //判断是否为String对象,刚刚的代码在这就直接输出false。 if (anObject instanceof String) { //此处value是String类中定义的将当前调用此方法的String转换成的char数组,方便进行下面的比较。 String anotherString = (String)anObject; int n = count; //判断调用String的char数组和比较String的char数组长度是否一致。 if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; //循环遍历判断每个字符是否一致,通过数组下标。 while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; }
总结:String类型的对象用equals进行比较,首先比较地址,再转换为char数组,进行数组长度对比,最后比较数组下标来实现对比功能。