有时候经常看到一些比如 == 和 equals() 的区别,这样的问题,其实你只需要搞明白 equals() 的底层实现,这个问题绝对不难。
下面是关于 equals()
方法的源码,首先 String
的 equals()
方法是 String
类重写了 Object
的 equals()
方法而实现的。
// Object equals()
public boolean equals(Object obj) {
return (this == obj);
}
// String equals()
public boolean equals(Object anObject) {
/*
第一步: 先和自己进行比较 this == anObject, 如果对象的地址相同, 可知对象相等, 返回 true
看到下面这里行, 我们可以说 equals() 就是基于 == 来实现的
*/
if (this == anObject) {
return true;
}
/*
第二步: 判断传递的参数 anObject 是否是 String, 如果不是直接返回 false
*/
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
/*
第三步: 如果 anObject 是 String 类型, 就强制转化为字符串, 然后判断当前对象与传递的对象的长度时候相同
不相同则证明不等于, 返回 false
*/
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
/*
最后一步: 将两个对象转换为 char 数组使用 while 循环逐一进行比较
只有当 v1[i] == v2[i] 全部等于 true 时, 返回 true
*/
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
结束:以上就是 equals() 的源码解析,如果有不对的地方欢迎指教。