Objects.equals()方法源码
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
1). 直接比较两个对象的地址信息,地址信息一致内容肯定一致返回true 2). 首先觉得a!=null这一段代码写在前面,是为了保证后面的equals方法NPE报错问题 3). 结合起来看就是地址相同或者内容相同就返回true,如果其中2个参数为null返回true,有一个为null返回false
String.equals()方法源码
public boolean equals(Object anObject) {
// 如果对象地址相同直接返回true,方法结束
if (this == anObject) {
return true;
}
// 判断anObject对象是否是String的一个实例
if (anObject instanceof String) {
// 类型转换
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
// 这里的代码逻辑很巧妙,值得学习(一个循环来检查每一个位置的字符是否一致,有一个不一致就返回false,反之返回true)
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
1). 笼统的说如果参数不为null,并且是一个String对象,并且两个对象拥有相等的字符序列,返回true,反之返回false